简体   繁体   English

除非服务器套接字端口经过硬编码,否则客户端套接字无法从服务器套接字接收

[英]client socket cannot receive from server socket unless server socket port is hardcoded

  • I create a client socket with default constructor. 我使用默认构造函数创建了一个客户端套接字。
  • I send a packet to the server on port 45500. 我将数据包发送到端口45500上的服务器。
  • I receive the packet on server-side on port 45500 我在端口45500的服务器端收到数据包
  • I create a new socket on server-side 我在服务器端创建一个新的套接字
  • I send an ack with the new serverSocket. 我用新的serverSocket发送一个确认。 The ack is sent to the receivedPacket.getport() 确认将发送到receivePacket.getport()
  • The client receives nothing UNLESS I don't create a new socket on server-side and just send the ack with the old socket (with hardcoded port 45500) 客户端什么也不会收到,除非我没有在服务器端创建新的套接字,而只是发送带有旧套接字的ack(带有硬编码端口45500)
  • I have no clue what's going on! 我不知道发生了什么事!

client 客户

DatagramSocket clientSocket = new DatagramSocket();
byte[] receiveData = new byte[5000];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
byte[] connection = connectionRequest.getBytes();
InetAddress IPAdress = InetAddress.getByName("169.xxx.xx.xxx");
DatagramPacket packet = new DatagramPacket(connection, connection.length, IPAdress, 45500);
clientSocket.send(packet);
// doesn't receive unless port #45500 on server side sends!
clientSocket.receive(receivePacket);

server 服务器

DatagramSocket connectionSocket = new DatagramSocket(45500);
byte[] receiveData = new byte[5000];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
connectionSocket.receive(receivePacket);
int clientPort = receivePacket.getPort();
InetAddress IP = receivePacket.getAddress();
byte[] sendData = ("accepted").getBytes();
DatagramSocket serverSocket = new DatagramSocket();
// doesn't work unless connectionSocket (port 45500) sends!
serverSocket.send(new DatagramPacket(sendData, sendData.length, IP, clientPort)); 

停用两侧的Windows10防火墙就可以了!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM