Udp 服务器客户端 java
Udp Server Client java
我写过UDP服务端客户端程序。我面临的问题是,当我是 运行 服务器程序时,它没有等待客户端连接。整个代码在 运行 之后执行,直到结束。当我在服务器端执行之间 运行 客户端时,客户端正在从其执行点接收数据。这是我的服务器代码-
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(4321);
byte[] sendData;
String sentence = null;
FileInputStream file = new FileInputStream(new File("E:\Deepak.txt"));
InetAddress IPAddress=InetAddress.getByName("localhost");
BufferedReader in = new BufferedReader(new InputStreamReader(file));
do{
while((sentence = in.readLine()) != null)
{
Thread.sleep(3000);
System.out.println(sentence);
sendData = sentence.getBytes();
DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length,IPAddress,9876);
serverSocket.send(sendPacket);
}
}while(true);
}
这是我的客户端代码-
public static void main(String args[]) throws SocketException, UnknownHostException, IOException
{
DatagramSocket clientSocket = new DatagramSocket();
byte[] receiveData = new byte[1024];
String sentence ;
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
receivePacket.getLength();
System.out.println(receivePacket.getLength());
clientSocket.receive(receivePacket);
sentence = new String( receivePacket.getData());
}
}
UDP是无连接的,所以里面没有所谓的连接。
您只能发送一个数据包(以 fire and forget 方式,java 中的 send
会将数据发送到 Datagram
中指定的端口) 或在端口上接收数据包(java 中的 receive
将阻塞,直到收到数据包)。
因此,如果您想要一个仅在客户端 "connects" 向其发送数据时才发送数据的服务器,您需要在 UDP 之上实现自己的连接。
所以总结一下:
send
不会等待任何东西,它只会将数据报扔到网络上
receive
将等待数据报到达
有了以上信息,您需要编写自己的协议来保持连接。
我写过UDP服务端客户端程序。我面临的问题是,当我是 运行 服务器程序时,它没有等待客户端连接。整个代码在 运行 之后执行,直到结束。当我在服务器端执行之间 运行 客户端时,客户端正在从其执行点接收数据。这是我的服务器代码-
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(4321);
byte[] sendData;
String sentence = null;
FileInputStream file = new FileInputStream(new File("E:\Deepak.txt"));
InetAddress IPAddress=InetAddress.getByName("localhost");
BufferedReader in = new BufferedReader(new InputStreamReader(file));
do{
while((sentence = in.readLine()) != null)
{
Thread.sleep(3000);
System.out.println(sentence);
sendData = sentence.getBytes();
DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length,IPAddress,9876);
serverSocket.send(sendPacket);
}
}while(true);
}
这是我的客户端代码-
public static void main(String args[]) throws SocketException, UnknownHostException, IOException
{
DatagramSocket clientSocket = new DatagramSocket();
byte[] receiveData = new byte[1024];
String sentence ;
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
receivePacket.getLength();
System.out.println(receivePacket.getLength());
clientSocket.receive(receivePacket);
sentence = new String( receivePacket.getData());
}
}
UDP是无连接的,所以里面没有所谓的连接。
您只能发送一个数据包(以 fire and forget 方式,java 中的 send
会将数据发送到 Datagram
中指定的端口) 或在端口上接收数据包(java 中的 receive
将阻塞,直到收到数据包)。
因此,如果您想要一个仅在客户端 "connects" 向其发送数据时才发送数据的服务器,您需要在 UDP 之上实现自己的连接。
所以总结一下:
send
不会等待任何东西,它只会将数据报扔到网络上receive
将等待数据报到达
有了以上信息,您需要编写自己的协议来保持连接。