client端的代码
package com.baidu.demo1;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Test3_Client {
public static void main(String[] args) throws IOException{
InetAddress address=InetAddress.getByName("localhost");
int port=8800;
byte[] data="用户名:shabi;密码:555".getBytes();
DatagramPacket packet=new DatagramPacket(data,data.length,address,port);
DatagramSocket socket=new DatagramSocket();
socket.send(packet);
byte[] fromClient=new byte[1024];
DatagramPacket frompacket=new DatagramPacket(fromClient,fromClient.length);//创建数据包,将会用数据包接受收到的信息
socket.receive(frompacket);
String fromServer=new String(fromClient,0,frompacket.getLength());
System.out.println("我是客户端,服务器端说: "+fromServer);
}
}
server端的代码
package com.baidu.demo1;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class Test3_Server {
public static void main(String[] args) throws IOException{
DatagramSocket socket=new DatagramSocket(8800);
int count=0;
while(true){
byte[] data=new byte[1024];
DatagramPacket packet=new DatagramPacket(data,data.length);//这里不清楚DatagramPacket和data的关系,为什么每次都///要创建新的byte?
socket.receive(packet);
count++;
System.out.println("序号为: "+count);
Test3_ServerThread uu=new Test3_ServerThread(packet);
uu.start();
}
}
}
线程的代码
package com.baidu.demo1;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class Test3_ServerThread extends Thread {
DatagramPacket packet=null;
public Test3_ServerThread(DatagramPacket packet){
this.packet=packet;
}
public void run(){
//System.out.println("咋回事?");
byte[] ans=new byte[packet.getLength()];
System.arraycopy(packet.getData(), 0, ans, 0, packet.getLength());
//System.out.println(packet.getData());
String info=new String(ans,0,packet.getLength());
System.out.println("我是服务器,客户端说: "+info);
byte[] toClient="欢迎您".getBytes();
InetAddress address=packet.getAddress();
int port=packet.getPort();
DatagramPacket topacket=new DatagramPacket(toClient,toClient.length,address,port);
DatagramSocket socket;
try {
socket = new DatagramSocket();
socket.send(topacket);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
此代码参考学习慕课网的java socket教程。
对于不明白的地方,刚刚看了DatagramPacket的构造函数。
DatagramPacket
public DatagramPacket(byte[] buf,
int length)
-
构造
DatagramPacket
,用来接收长度为length
的数据包。length
参数必须小于等于buf.length
。-
参数:
-
buf
- 保存传入数据报的缓冲区。 -
len
- 要读取的字节数。
-