我尝试使用BufferedReader和BufferedWriter进行基本的Socket通信,使用" localhost"或使用同一路由器在本地网络中连接2台PC。让我遇到麻烦的一步是通过互联网连接。我已在selfhost 设置免费域名,并将该域名添加到路由器的动态DNS 设置中,并添加了 NAT 用于使用的港口。
之后,我能够通过该域使ServerSocket 接受请求,并且能够使用write(string +" \ n")和flush()方法两边都有套接字,但是BufferedReader 没有接收到这些消息中的任何一条并抛出异常因为" null"几秒钟后返回。使用全局IP时也是如此,只有本地和hamachii ips工作了
我已经在我的防火墙中打开了端口,用于任何TCP使用,并停用了我的计算机上可能阻止它一段时间的任何防病毒软件,但没有任何改变。<登记/>
对于 isConnected()方法,两个套接字都返回true,但是当我使用全局ip / domain时, ready()方法在整个时间返回false 。我真的不知道是什么导致了这个问题,但我不认为它与我的防火墙有关,因为我想我甚至无法连接,或者至少会有一个可以单向沟通。 java是一个特殊的东西,使用全局IP时有不同的通信协议吗?是什么让读者一直忙着?
如果有人有建设性的想法或有人遇到同样的问题我真的很感激。
基本示例:
当使用ip =&#34; globalhost&#34;控制台输出&#34;消息&#34;
当使用ip = global-ip或selfhost-domain时,服务器发送该行并关闭,但客户端不接收任何内容。
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket client = new Socket (ip, 1034);
InputStream in = client.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
System.out.println(reader.readLine());
client.close();
} catch (Exception e) {
}
}
}
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(1034);
Socket socket = server.accept();
OutputStream out = socket.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write("message\n");
writer.flush();
server.close();
} catch (Exception e) {
}
}
}
答案 0 :(得分:0)
尝试
writer.write("message\r\n");