我创建了一个简单的客户端服务器套接字程序并发送字符串a | b | c | *,并且客户端没有收到它。客户端在另一台机器上。
服务器代码。
String format = "a|b|c|*";
ServerSocket ss = new ServerSocket(2222);
System.out.println("Server Started.");
while (true) {
Socket s = ss.accept();
System.out.println("Connection accepted.");
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println(format);
ps.flush();
System.out.println("Format sent.");
}
客户端
try {
Socket s = new Socket("192.168.0.71", 2222);
// step 3: Get I/O streams
InputStream is = s.getInputStream();
InputStreamReader isr= new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String format = br.readLine();
System.out.println(format);
} catch(Exception ex){
System.out.println(ex.getMessage());
}
当我在同一台机器上创建客户端时,它正在接收字符串,当我将此字符串传递给另一台机器客户端时,它不会收到它。
答案 0 :(得分:0)
所以我在我的两个盒子上尝试了你的代码,远程连接运行正常。一堆好评,但我想我会写一些有待尝试的答案:
暗示您已经能够在本地telnet到服务器并查看格式字符串。精细。您是否也能够使用telnet从远程客户端到服务器,而也看到格式字符串?
如果远程telnet不起作用,那么我会检查是否有防火墙或其他路由问题。你能从客户端ping服务器吗?
telnet可能无法正常工作的另一个原因是您的服务器可能绑定到错误的端口。默认是绑定到所有接口但只是为了确保,您应该检查。如果您使用的是unix盒或OSX,则可以使用netstat
命令查看要绑定的端口。以下输出显示服务器绑定到*
,这意味着所有接口。
$ netstat -an | grep 2222
tcp46 0 0 *.2222 *.* LISTEN
如果没有其他帮助,那么意识到如果你连接了一个telnet,它将阻止所有其他telnet和客户端连接,因为你没有关闭服务器上的套接字。
希望其中一些有用。