我有以下代码(尝试)写入服务器:
String serverName = "w.x.y.z";
int port = 3010;
InetAddress inetAddress = InetAddress.getByName(serverName);
Socket socket = new Socket(inetAddress, port);
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(transactionString);
bufferedWriter.write(headerString);
bufferedWriter.write(loginString);
bufferedWriter.flush();
String result = null;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuilder sb = new StringBuilder();
String str;
while ((str = bufferedReader.readLine()) != null)
{
sb.append(str + "\n");
}
result = new String(sb);
debug("done with reads");
textArea.setText(new String(result));
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
我在远程计算机上的服务器代码中有一个断点,我有一个Visual Basic程序通过同一个套接字进行通信。我已经运行了Visual Basic代码并且(反复)验证了服务器在那里,监听这个套接字,并且我可以通过运行该程序来查看我的断点。
运行此程序时,我没有遇到断点。我已经尝试了各种关于设置套接字的东西,比如用“new Socket()”实例化套接字,然后用setter方法设置inetAddress和端口号。我使用了OutputStreamWriter而不是BufferedWriter。我试过这个,KeepAlive设置为false,超时设置为15秒。这些都不会导致服务器达到其断点。
我得到以下输出。
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
当然还有更多的stackTrace行。
这不是数据格式问题;一旦服务器有机会确定它是否有效,服务器就会在该端口上听到消息后立即触发断点。这不是服务器工作的问题,因为它可以在这个端口和套接字上工作。我已经三次检查了两者之间的地址和端口号;我不认为那里会有任何问题。
这不是任何形式的阅读问题;正如我所说,大型机上的断点没有被击中。
我在调用getByName()后设置断点,在调试器中打开inetAddress,找到代表IP地址的4字节int,并翻译每个十六进制字节 - 在从域名翻译后,具有相同的我从运行所有这些的机器上ping服务器时获得的IP地址。
有人可以建议我的其他地方吗?
答案 0 :(得分:0)
原来服务器需要一个SSL套接字。感谢那些回复的人。