我已在我的系统中启动了一个客户端。它在端口号7913上运行。我通过TCP / IP从Java发送请求数据到7913上运行的服务器套接字。
log is Message发送到Socket [addr = / 190.161.153.109,port = 7913,localport = 54717]
我还收到了服务器对该特定数据的响应。现在服务器也在尝试向我的localport 54717发送请求,而不是我的应用程序正在监听的端口[即7913]。
如何处理请求?当我尝试使用telnet连接到我的localport时,连接被拒绝。
代码:
public static String ickTransport(String ickHeader,String ickdata, Socket connection) throws UnknownHostException, IOException
try
{
connection.setSoTimeout(Integer.parseInt(ickTimeOut));
log.debug("ick Message for "+connection.toString()+" is " + ickMessage);
BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream());
DataOutputStream osw = new DataOutputStream(bos);
osw.writeShort(Integer.parseInt(ickHeader));
osw.writeBytes(ickMessage);
osw.flush();
DataInputStream stream = new DataInputStream(connection.getInputStream());
int numberRecords = stream.readShort();
if (numberRecords > 0) {
int nSizeRead = 0;
byte[] bRequest = new byte[numberRecords];
int nSizeBuffer;
for (; numberRecords > 0; numberRecords -= nSizeBuffer) {
byte[] bBuffer = new byte[numberRecords];
nSizeBuffer = stream.read(bBuffer);
System.arraycopy(bBuffer, 0, bRequest, nSizeRead, nSizeBuffer);
nSizeRead += nSizeBuffer;
}
ickResponse = new String(bRequest);
log.debug("Response from ick is " + ickResponse);
}
}
catch (SocketTimeoutException e)
{
log.error(e.getMessage());
}
return ickResponse;
答案 0 :(得分:0)
要了解发生了什么,您应该了解什么是倾听套接字以及它与连接套接字的区别。
当你的应用程序监听它时(ServerSocket
会这样做):
bind
请求或构造函数accept
方法的新连接提供新的套接字。当您的应用程序建立新连接时,使用connect
方法。除非你在socket上使用bind
请求:
因为没有人监听这个动态端口,所以telnet请求被拒绝了。