【问题标题】:Connecting two computers(machines over a wireless network)连接两台计算机(通过无线网络的机器)
【发布时间】:2017-05-08 05:04:21
【问题描述】:

我正坐在一个房间里,我的笔记本电脑已连接到无线网络。 在我旁边,我的朋友正坐在另一台笔记本电脑旁,该笔记本电脑也连接到同一网络。

我们想使用套接字编程(eclipse/netbeans)连接我们的笔记本电脑。我们应该怎么做?这是我们到目前为止所做的:

  1. 我的笔记本电脑上有一个客户端类。我的朋友有服务器类
    她的(地址中包含我笔记本电脑的 IP)。
  2. 我们已禁用两台笔记本电脑上的防火墙。
  3. 我们已在两台笔记本电脑上手动打开端口 6789。
  4. 然后我们首先在我的笔记本电脑上运行服务器类,然后运行客户端
    上她的课。

这些是类。

服务器:

package Connect1;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*; 
import java.net.*; 
public class Server1 
{
    public static void main(String argv[]) throws Exception 
    {
       String clientSentence;
       String capitalizedSentence;
       ServerSocket welcomeSocket = new ServerSocket(6789);
       while(true)
       {
           Socket connectionSocket = welcomeSocket.accept(); 
           BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
           DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
           clientSentence = inFromClient.readLine();
           capitalizedSentence = clientSentence.toUpperCase() + '\n';
           outToClient.writeBytes(capitalizedSentence); 
           connectionSocket.close();
         //  welcomeSocket.close();
        }
     }
}

客户:

package Connect1;

import java.io.*; 
import java.net.*;  
import javax.swing.JOptionPane;
import java.util.Scanner;
class TCPClient { 
    public static void main(String argv[]) throws Exception
    { 
        String sentence;
        String modifiedSentence;
        BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in));
        Socket clientSocket = new Socket("IP of my laptop here", 6789);
        DataOutputStream outToServer =new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer =new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        System.out.print("Enter characters to be capitalized: ");
        sentence =inFromUser.readLine(); 
        outToServer.writeBytes(sentence + '\n'); 
        modifiedSentence = inFromServer.readLine(); 
        System.out.println("FROM SERVER: " + modifiedSentence); 
        Scanner input=new Scanner(System.in);
        //System.out.print("Do you want to enter again? Press '0' for 'yes' and '1' if 'No'.");
        //i=input.nextInt();

    }
  }

我们得到这个错误:

Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at Code1.TCPClient.main(TCPClient.java:18)

谁能告诉我我们做错了什么?我们的代码或程序中是否缺少某些内容?我们是否也需要先建立某种其他类型的连接?我们是否必须为此打开其他端口?这可以在两台笔记本电脑上使用不同版本的 eclipse 来完成吗?

【问题讨论】:

  • 一个很好的测试是尝试从客户端计算机“ping”(Windows 上的跟踪)服务器的 IP 地址。这会告诉您是否存在路由问题和代码问题。

标签: java eclipse sockets network-programming client-server


【解决方案1】:

要创建客户端套接字,您需要使用服务器的 IP 地址,而不是您的。

package Connect1;

import java.io.*; 
import java.net.*;  
import javax.swing.JOptionPane;
import java.util.Scanner;
class TCPClient { 
public static void main(String argv[]) throws Exception
{ 
    String sentence;
    String modifiedSentence;
    BufferedReader inFromUser =new BufferedReader(new   InputStreamReader(System.in));
    Socket clientSocket = new Socket(InetAddress.getByName("SERVER_IP"), 6789);
    DataOutputStream outToServer =new DataOutputStream(clientSocket.getOutputStream());
    BufferedReader inFromServer =new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    System.out.print("Enter characters to be capitalized: ");
    sentence =inFromUser.readLine(); 
    outToServer.writeBytes(sentence + '\n'); 
    modifiedSentence = inFromServer.readLine(); 
    System.out.println("FROM SERVER: " + modifiedSentence); 
    Scanner input=new Scanner(System.in);
    //System.out.print("Do you want to enter again? Press '0' for 'yes' and '1' if 'No'.");
    //i=input.nextInt();

 }
  }

将“SERVER_IP”替换为服务器的 IP。

【讨论】:

    【解决方案2】:

    替换

    Socket clientSocket = new Socket("IP of my laptop here", 6789);
    

    Socket clientSocket = new Socket(server Address, 6789);
    

    【讨论】:

      【解决方案3】:
      1. 在您的命令提示符下,type:ipconfig

        这将提供您机器的 IP 地址。

      2. 现在假设您在您的机器上运行服务器代码,将步骤 1 中检索到的 IP 地址传递给客户端代码(您的朋友作为客户端运行的代码):

        Socket clientSocket = new Socket(<Here goes the IP address of the server machine>, 6789);
        

      现在,无论哪台机器运行客户端代码,都需要传递服务器机器的 IP 地址,以便它们可以相互连接。所以如果你想和你的朋友聊天,在运行服务器类代码之后,也运行客户端类代码。现在你们俩都连接到服务器并可以聊天了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-29
        • 2015-05-17
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多