套接字通过Internet连接,但BufferedReader没有接收任何线路

时间:2014-07-06 15:58:28

标签: java sockets dns global

我尝试使用BufferedReader和BufferedWriter进行基本的Socket通信,使用" localhost"或使用同一路由器在本地网络中连接2台PC。让我遇到麻烦的一步是通过互联网连接。我已在selfhost 设置免费域名,并将该域名添加到路由器的动态DNS 设置中,并添加了 NAT 用于使用的港口。
之后,我能够通过该域使ServerSocket 接受请求,并且能够使用write(string +&#34; \ n&#34;)和flush()方法两边都有套接字,但是BufferedReader 没有接收到这些消息中的任何一条并抛出异常因为&#34; null&#34;几秒钟后返回。使用全局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) {
    }
  }
}

1 个答案:

答案 0 :(得分:0)

尝试

  writer.write("message\r\n");