最近写了个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实现客户端和服务端的交互,达到远程监视目标计算机屏幕的目的。这样的程序...
### Socket客户端和服务端的编程实现(C和Android) #### 实验目的及要求 - **理解套接字(Socket)通信的基本原理和机制**:了解Socket的工作方式及其在网络通信中的作用。 - **理解进程间通信的机制**:熟悉不同进程...
Socket编程是计算机网络通信的核心技术之一,主要用于实现进程间的网络通信。在本示例中,我们关注的是客户端和服务端的交互...通过分析和运行"051408p03"中的代码,开发者可以深入理解客户端服务端通信的原理和实践。
本DEMO展示了如何在QT环境下使用UDP进行通信,即创建一个简单的UDP服务器和客户端,实现数据的双向传输。 首先,让我们从`main.cpp`开始。这个文件是程序的入口点,通常包含了应用的主要逻辑和窗口对象的实例化。在...
Socket 客户端和服务端的编程实现(C# 和 Android 附运行截图) ...本实验通过实现客户端和服务端的编程,探索了 Socket 的基本原理和机制,并且展示了使用 C# 和 Android 实现 Socket 通信的实践经验。
Socket通信在IT行业中是网络编程的基础,特别是在C#开发中,它被广泛用于构建服务器和客户端应用程序,实现数据的高效传输。本项目包含了一个完整的C#版Socket通信示例,涵盖了服务端、客户端以及WebSocket的实现,...
本资源主要涉及基于TCP和UDP的简单Socket编程,通过提供的UDPServer.java, UDPClient.java, TCPServer.java, 和 TCPClient.java这四个源代码文件,我们可以深入理解这两种传输协议的原理及其应用。 首先,TCP...
1. **Socket编程**:Socket是网络通信的基本组件,C#中的System.Net.Sockets命名空间提供了Socket类,可以用来创建TCP或UDP连接,实现数据的双向传输。 2. **HTTP/HTTPS协议**:对于基于Web的应用,通常会使用HTTP...
在IT行业中,客户端与服务端通信是网络编程的基础,它涉及到如何通过互联网让不同设备之间交换数据。在本场景中,我们关注的是基于Socket的简单网络通信,其中虚拟机作为客户端,而主机作为服务器。这样的设置允许...
Socket是网络编程中的一个重要概念,它提供了一个进程间通信(IPC)的机制,允许不同计算机上的应用程序进行双向通信。在TCP/IP协议栈中,Socket分为两种类型:基于流的Socket(TCP)和基于数据报的Socket(UDP)。...
本教程将深入探讨使用NSStream和CFStream进行iOS客户端和服务端编程的技术细节。 NSStream和CFStream是Apple提供的核心框架,用于处理网络流数据。它们都是基于Cocoa和Core Foundation的接口,可以灵活地支持TCP/IP...
本例中,我们探讨的是如何使用Python的socket库创建一个简单的服务端(server.py)和客户端(client.py)来实现双向通信。 1. **Python socket基础知识**: - `socket`模块提供了低级网络通信接口,它是基于...
本文将深入探讨基于Socket编程的客户端和服务器端程序,特别是在TCP和UDP协议下的应用。 首先,Socket可以理解为网络上的两个应用程序之间的通信端点。它提供了一种在不同主机之间交换数据的机制,是网络编程的基础...
在Android应用开发中,...总之,Android客户端与服务端通过Socket通信,可以实现灵活、高效的双向数据传输。但需要注意的是,实际应用中需考虑网络环境的复杂性和Android平台的特殊性,以提高用户体验和应用稳定性。
Socket 编程实现客户端和服务器端的通信 本文将详细介绍 Socket 编程实现客户端和服务器端的通信,包括实验目的、实验要求、实验原理和设计、实验步骤等。 一、实验目的 本实验的目的是为了理解套接字 (socket) ...
总结来说,这个C# Winform项目展示了如何使用TCP和Socket实现服务端与多个客户端之间的双向通信。通过理解和实践这样的项目,开发者可以深入掌握网络编程的基本原理,为构建更复杂的应用打下坚实的基础。
【C# TCP客户端和服务端编程】是网络编程中常见的任务,主要涉及TCP协议的使用,通过C#的Socket类来实现。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于需要...
总结来说,"STM32连接PC服务端 ETH-TCP Client客户端 源代码"项目涵盖了嵌入式系统与PC间的TCP通信基础,涉及STM32微控制器的网络编程、C#服务端开发以及TCP/IP协议的理解和应用。通过这个项目,开发者可以学习到...
客户端则通过TCP Socket连接到服务端,建立起双向通信的通道。 VB(Visual Basic)作为微软的可视化编程环境,提供了方便的Socket控件,可以简化Socket编程的过程。开发者可以使用VB中的Socket控件来创建服务器端和...
- **定义**:网络上的两个程序通过双向通信链路实现数据交换,该链路的一端被称为Socket。 - **作用**:实现客户端与服务器之间的连接。 2. **Socket编程步骤**: 1. **创建Socket**:在服务器端创建一个监听...