簡體   English   中英

除非服務器套接字端口經過硬編碼,否則客戶端套接字無法從服務器套接字接收

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

  • 我使用默認構造函數創建了一個客戶端套接字。
  • 我將數據包發送到端口45500上的服務器。
  • 我在端口45500的服務器端收到數據包
  • 我在服務器端創建一個新的套接字
  • 我用新的serverSocket發送一個確認。 確認將發送到receivePacket.getport()
  • 客戶端什么也不會收到,除非我沒有在服務器端創建新的套接字,而只是發送帶有舊套接字的ack(帶有硬編碼端口45500)
  • 我不知道發生了什么事!

客戶

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);

服務器

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