【发布时间】:2016-08-12 11:29:20
【问题描述】:
我正在尝试使用 tcp 套接字连接将 json 消息发送到特定的 ip 和端口。该代码似乎适用于初始连接和消息提交,但在检查目标服务器时,我没有找到消息。我有一个也可以运行的 .NET 版本,出于某种原因,尝试发送完全相同的消息可以正常工作。我尝试使用wireshark捕获数据包和连接,但似乎根本没有设置任何数据包。
wireshark 捕获:
java中的代码:
try
{
clientSocket = new Socket(ipaddress, portnumber);
outStreamSplunk = new PrintWriter(clientSocket.getOutputStream(), true);
outStreamSplunk.flush();
clientSocket.setKeepAlive(true);
clientSocket.setSoTimeout(1000);
outStreamSplunk.println(post + "\n");
System.out.println("SENT MESSAGE: " + post);
clientSocket.close();
}
catch (Exception exc)
{
modifiedSentence = "";
}
以及 .NET 中有效的代码:
ip = "xxx.xxx.x.xxx"
port = xxxx
Dim ips As String = Dns.GetHostEntry(ip).AddressList(0).ToString()
_GLOIP = IPAddress.Parse(ips)
_port = port
'initiate the client and get the stream to use
myTcp = initiate()
netStream = myTcp.GetStream()
Try
If netStream.CanWrite Then
If Not text.EndsWith(vbCr & vbLf) Then
text += Environment.NewLine
End If
Dim sendBytes As Byte() = Encoding.UTF8.GetBytes(text)
netStream.Write(sendBytes, 0, sendBytes.Length)
Else
err = "cannot write to the stream"
End If
Catch ex As Exception
appLogs.constructLog(err & vbNewLine & ex.Message.ToString, True, True)
Exit Sub
End Try
编辑:
我尝试了另一台服务器,因为我认为它可能是我的机器,并且 .NET 脚本在另一台机器上运行。结果表明 TCP 连接工作正常,但不知道如何解释响应:
我没有看到任何错误,因此可能是目标服务器的问题。 .NET 版本和 java 版本之间的唯一区别是 .NET 版本正在写入字节数组。这让我很难过。但是如果我没有找到解决方案,我将需要用 .NET 版本并以某种方式将消息从主 java 代码传输到 .NET 版本。
【问题讨论】:
-
这不是一个好的异常处理程序...
-
不同之处在于异常处理程序......在.Net版本中,您正在记录错误。在 Java 版本中,您将忽略它。至少添加一个
exc.printStackTrace()。 -
此外,.Net 代码首先不包括建立连接。由于您在 Java 版本中没有看到任何数据包通过网络传输,因此您的问题似乎就出在这上面。猜测一下,
ipaddress或portnumber是无效的,因此甚至没有尝试连接(因为 Wireshark 会看到连接尝试)。 -
谢谢大家。将首先更改异常处理程序并尝试。
-
没有发现异常。代码中似乎没有任何错误。我可以从命令提示符 ping ip,然后尝试进行 telnet 连接,但失败了:无法在端口上打开与主机的连接,连接失败。如果我在这里混淆了网络协议但只是想尝试一切,请原谅我