地址:http://blog.csdn.net/wintys/article/details/3525643/
![](https://p-blog.csdn.net/images/p_blog_csdn_net/wintys/EntryImages/20081215/udp1.jpg)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/wintys/EntryImages/20081215/udp2.jpg)
- /**
- *UDPServer
- *@author Winty wintys@gmail.com
- *@version 2008-12-15
- */
- import java.io.*;
- import java.net.*;
- class UDPServer{
- public static void main(String[] args)throws IOException{
- DatagramSocket server = new DatagramSocket(5050);
- byte[] recvBuf = new byte[100];
- DatagramPacket recvPacket
- = new DatagramPacket(recvBuf , recvBuf.length);
- server.receive(recvPacket);
- String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
- System.out.println("Hello World!" + recvStr);
- int port = recvPacket.getPort();
- InetAddress addr = recvPacket.getAddress();
- String sendStr = "Hello ! I'm Server";
- byte[] sendBuf;
- sendBuf = sendStr.getBytes();
- DatagramPacket sendPacket
- = new DatagramPacket(sendBuf , sendBuf.length , addr , port );
- server.send(sendPacket);
- server.close();
- }
- }
- /**
- *UDPClient
- *@author Winty wintys@gmail.com
- *@version 2008-12-15
- */
- import java.io.*;
- import java.net.*;
- class UDPClient{
- public static void main(String[] args)throws IOException{
- DatagramSocket client = new DatagramSocket();
- String sendStr = "Hello! I'm Client";
- byte[] sendBuf;
- sendBuf = sendStr.getBytes();
- InetAddress addr = InetAddress.getByName("127.0.0.1");
- int port = 5050;
- DatagramPacket sendPacket
- = new DatagramPacket(sendBuf ,sendBuf.length , addr , port);
- client.send(sendPacket);
- byte[] recvBuf = new byte[100];
- DatagramPacket recvPacket
- = new DatagramPacket(recvBuf , recvBuf.length);
- client.receive(recvPacket);
- String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());
- System.out.println("收到:" + recvStr);
- client.close();
- }
- }
附件: 源程序
上面的代码只能发送和接受一次数据。
下面是我稍作修改后的代码,可以实现循环聊天:
服务器端:
服务器端:
public class Server {
public static void main(String[] args) throws IOException {
while(true){
DatagramSocket server = new DatagramSocket(5050);
byte[] recvBuf = new byte[100];
DatagramPacket recvPacket
= new DatagramPacket(recvBuf , recvBuf.length);
server.receive(recvPacket);
String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
System.out.println("来之于客服端的数据: " + recvStr);
int port = recvPacket.getPort();
InetAddress addr = recvPacket.getAddress();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sendStr = br.readLine();
byte[] sendBuf;
sendBuf = sendStr.getBytes();
DatagramPacket sendPacket
= new DatagramPacket(sendBuf , sendBuf.length , addr , port );
server.send(sendPacket);
server.close();
}
}
}
客户端:
public class Client {
public static void main(String[] args)throws IOException{
while(true){
try{
DatagramSocket client = new DatagramSocket();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sendStr = br.readLine();
byte[] sendBuf;
sendBuf = sendStr.getBytes();
InetAddress addr = InetAddress.getByName("127.0.0.1");
int port = 5050;
DatagramPacket sendPacket
= new DatagramPacket(sendBuf ,sendBuf.length , addr , port);
client.send(sendPacket);
byte[] recvBuf = new byte[100];
DatagramPacket recvPacket
= new DatagramPacket(recvBuf , recvBuf.length);
client.receive(recvPacket);
String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());
System.out.println("来之于服务器端的数据:" + recvStr);
client.close();
}catch(IOException e){
}finally{
}
}
}
}