`
谷超
  • 浏览: 165503 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

UDP Socket编程--客户端和服务端双向通信

    博客分类:
  • Java
阅读更多

最近写了个UDP通信,能够实现客户端和服务端的双向通信,和大家分享!
因为UDP是无连接通信,叫客户端和服务端是不准确的,应该叫发送端和接收端,因为我的代码能实现双向的通信,在接收信息的同时还能够发送信息,所以我叫做一端和另一端!

一端:

package test.udp;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/**
 * @author 
 * @version guchao
 * CreateTime:
 * Description:真正意义的UDP聊天,每端都可以不停地向另一端发送消息,也在不停地接收消息
 */
public class TestUDPServer2 {

	public static void main(String[] args) throws IOException {
		new TestUDPServer2().go();
	}
	
	private void go() {
		//服务端启动2个线程,1个发送,1个接收
		ServerSendThread send = new ServerSendThread();
		new Thread(send).start();
		
		ServerRecvThread recv = new ServerRecvThread();
		new Thread(recv).start();
	}

//	服务端发送线程
	class ServerSendThread implements Runnable{

		@Override
		public void run() {
			try {
				DatagramSocket ds = new DatagramSocket();
				String str = "";
				byte[] buf = null;
				while (true) {
					System.out.println("请输入>");
					BufferedReader br = new BufferedReader(
							new InputStreamReader(System.in));
					str = br.readLine();
					if ("bye".equals(str))
						break;
					buf = str.getBytes();

					DatagramPacket dp = new DatagramPacket(buf, buf.length,
							new InetSocketAddress("127.0.0.1", 5679));
					ds.send(dp);
					buf = null;
				}
				ds.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
	
//	服务端接收线程
	class ServerRecvThread implements Runnable{

		@Override
		public void run() {
			byte[] buf = new byte[1024];
			
			//接收端的端口需要指定,不然发送端不知道向哪个端口发送数据包
			DatagramSocket ds;
			try {
				ds = new DatagramSocket(5678);
			
				String message = "";
				while(true){
					DatagramPacket dp = new DatagramPacket(buf, buf.length);
					ds.receive(dp);
					
					message = new String(buf,0,dp.getLength());
					System.out.println("接收到Client端的信息为:"+message);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
}

 

另一端:

package test.udp;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 * @author
 * @version guchao CreateTime:2010-11-29 上午08:57:52 Description:发送端
 */
public class TestUDPClient2 {
	public static void main(String[] args) throws IOException {
		new TestUDPClient2().go();
	}

	private void go() {
		ClientSendThread send = new ClientSendThread();
		new Thread(send).start();

		ClientRecvThread recv = new ClientRecvThread();
		new Thread(recv).start();
	}

	class ClientSendThread implements Runnable {

		@Override
		public void run() {
			try {
				DatagramSocket ds = new DatagramSocket();
				String str = "";
				byte[] buf = null;
				while (true) {
					System.out.println("请输入>");
					BufferedReader br = new BufferedReader(
							new InputStreamReader(System.in));
					str = br.readLine();
					if ("bye".equals(str))
						break;
					buf = str.getBytes();

//					System.out.println("-----buf.length-------" + buf.length);
					DatagramPacket dp = new DatagramPacket(buf, buf.length,
							new InetSocketAddress("127.0.0.1", 5678));
					ds.send(dp);
					buf = null;
				}
				ds.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	class ClientRecvThread implements Runnable {

		@Override
		public void run() {
			byte[] buf = new byte[1024];
			
			//接收端的端口需要指定,不然发送端不知道向哪个端口发送数据包
			DatagramSocket ds;
			try {
				ds = new DatagramSocket(5679);
			
				String message = "";
				DatagramPacket dp = null;
				while(true){
					dp = new DatagramPacket(buf, buf.length);
					ds.receive(dp);
					
					message = new String(buf,0,dp.getLength());
					System.out.println("接收到Server端信息为:"+message);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

 

 

分享到:
评论

相关推荐

    c#屏幕监视木马分客户端和服务端(基于socket)

    标题中的“c#屏幕监视木马分客户端和服务端(基于socket)”指的是使用C#编程语言开发的一个系统监控工具,该工具通过网络通信协议Socket实现客户端和服务端的交互,达到远程监视目标计算机屏幕的目的。这样的程序...

    Socket客户端和服务端的编程实现(C和android附运行截图).docx

    ### Socket客户端和服务端的编程实现(C和Android) #### 实验目的及要求 - **理解套接字(Socket)通信的基本原理和机制**:了解Socket的工作方式及其在网络通信中的作用。 - **理解进程间通信的机制**:熟悉不同进程...

    socket编程 客户端服务端

    Socket编程是计算机网络通信的核心技术之一,主要用于实现进程间的网络通信。在本示例中,我们关注的是客户端和服务端的交互...通过分析和运行"051408p03"中的代码,开发者可以深入理解客户端服务端通信的原理和实践。

    C#版Socket通信含服务端、客户端、WebSocket,代码完整清晰

    Socket通信在IT行业中是网络编程的基础,特别是在C#开发中,它被广泛用于构建服务器和客户端应用程序,实现数据的高效传输。本项目包含了一个完整的C#版Socket通信示例,涵盖了服务端、客户端以及WebSocket的实现,...

    Socket客户端和服务端的编程实现(C#和android附运行截图).docx

    Socket 客户端和服务端的编程实现(C# 和 Android 附运行截图) ...本实验通过实现客户端和服务端的编程,探索了 Socket 的基本原理和机制,并且展示了使用 C# 和 Android 实现 Socket 通信的实践经验。

    基于TCP和UDP的简单socket编程

    本资源主要涉及基于TCP和UDP的简单Socket编程,通过提供的UDPServer.java, UDPClient.java, TCPServer.java, 和 TCPClient.java这四个源代码文件,我们可以深入理解这两种传输协议的原理及其应用。 首先,TCP...

    Mikin客户端与服务端通讯.rar

    1. **Socket编程**:Socket是网络通信的基本组件,C#中的System.Net.Sockets命名空间提供了Socket类,可以用来创建TCP或UDP连接,实现数据的双向传输。 2. **HTTP/HTTPS协议**:对于基于Web的应用,通常会使用HTTP...

    客户端与服务端通信

    在IT行业中,客户端与服务端通信是网络编程的基础,它涉及到如何通过互联网让不同设备之间交换数据。在本场景中,我们关注的是基于Socket的简单网络通信,其中虚拟机作为客户端,而主机作为服务器。这样的设置允许...

    Win_Socket PC端Socket通信 服务端和客户端同时实现

    Socket是网络编程中的一个重要概念,它提供了一个进程间通信(IPC)的机制,允许不同计算机上的应用程序进行双向通信。在TCP/IP协议栈中,Socket分为两种类型:基于流的Socket(TCP)和基于数据报的Socket(UDP)。...

    iOS 客户端 和 服务端编程

    本教程将深入探讨使用NSStream和CFStream进行iOS客户端和服务端编程的技术细节。 NSStream和CFStream是Apple提供的核心框架,用于处理网络流数据。它们都是基于Cocoa和Core Foundation的接口,可以灵活地支持TCP/IP...

    Python 通过 socket 实现服务端和客户端相互间网络通信的例子

    本例中,我们探讨的是如何使用Python的socket库创建一个简单的服务端(server.py)和客户端(client.py)来实现双向通信。 1. **Python socket基础知识**: - `socket`模块提供了低级网络通信接口,它是基于...

    基于socket编程的客户端和服务器端程序

    本文将深入探讨基于Socket编程的客户端和服务器端程序,特别是在TCP和UDP协议下的应用。 首先,Socket可以理解为网络上的两个应用程序之间的通信端点。它提供了一种在不同主机之间交换数据的机制,是网络编程的基础...

    android客户端服务端采用Socket通信

    在Android应用开发中,...总之,Android客户端与服务端通过Socket通信,可以实现灵活、高效的双向数据传输。但需要注意的是,实际应用中需考虑网络环境的复杂性和Android平台的特殊性,以提高用户体验和应用稳定性。

    Socket客户端和服务端的编程实现(C#和android附运行截图).pdf

    Socket 编程实现客户端和服务器端的通信 本文将详细介绍 Socket 编程实现客户端和服务器端的通信,包括实验目的、实验要求、实验原理和设计、实验步骤等。 一、实验目的 本实验的目的是为了理解套接字 (socket) ...

    C# winform实现一个服务端和多个客户端进行通信

    总结来说,这个C# Winform项目展示了如何使用TCP和Socket实现服务端与多个客户端之间的双向通信。通过理解和实践这样的项目,开发者可以深入掌握网络编程的基本原理,为构建更复杂的应用打下坚实的基础。

    在QT下的UDP服务器和客户端的简单DEMO

    本DEMO展示了如何在QT环境下使用UDP进行通信,即创建一个简单的UDP服务器和客户端,实现数据的双向传输。 首先,让我们从`main.cpp`开始。这个文件是程序的入口点,通常包含了应用的主要逻辑和窗口对象的实例化。在...

    C# TCP客户端和服务端编程

    【C# TCP客户端和服务端编程】是网络编程中常见的任务,主要涉及TCP协议的使用,通过C#的Socket类来实现。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于需要...

    STM32连接PC服务端 ETH-TCP Client客户端 源代码

    总结来说,"STM32连接PC服务端 ETH-TCP Client客户端 源代码"项目涵盖了嵌入式系统与PC间的TCP通信基础,涉及STM32微控制器的网络编程、C#服务端开发以及TCP/IP协议的理解和应用。通过这个项目,开发者可以学习到...

    网络聊天室程序(Socket服务端客户端

    客户端则通过TCP Socket连接到服务端,建立起双向通信的通道。 VB(Visual Basic)作为微软的可视化编程环境,提供了方便的Socket控件,可以简化Socket编程的过程。开发者可以使用VB中的Socket控件来创建服务器端和...

    java_socket服务端和客户端编程.doc

    - **定义**:网络上的两个程序通过双向通信链路实现数据交换,该链路的一端被称为Socket。 - **作用**:实现客户端与服务器之间的连接。 2. **Socket编程步骤**: 1. **创建Socket**:在服务器端创建一个监听...

Global site tag (gtag.js) - Google Analytics