0

我想在 java 上创建一个客户端/服务器应用程序,服务器的 IP 地址为 192.168.1.100,等待端口 4500 上的客户端请求。

客户端从键盘读取字符串,向服务器发送连接请求。建立连接后,它将字符串发送到服务器。

这是我尝试过的代码:

对于服务器:

import java.net.*;
import java.io.*;

public class Serveur {

    public Serveur() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try
        {
            ServerSocket ecoute;
            ecoute = new ServerSocket(1111);
            Socket service = null;
            System.out.println("Serveur en attente d'un client !");
            while(true)
            {

                service = ecoute.accept();
                System.out.println("Client connécté !");
                DataInputStream is = new DataInputStream(service.getInputStream());
                System.out.println("Client dit : " + is.readUTF().toUpperCase());
                service.close();
            }
        }
        catch(IOException e)
        {
            e.printStackTrace();

        }
    }

}

对于客户:

import java.net.*;
import java.io.*;
import java.util.Scanner;

public class Client {

    public Client() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Connexion en cours ...");
        try {
            Socket s = new Socket("localhost", 1111);
            DataOutputStream os = new DataOutputStream(s.getOutputStream());
            Scanner sn = new Scanner(System.in);
            os.writeUTF(sn.nextLine());
        } catch ( IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Connécté au serveur !");

    }

}

但我对这段代码有疑问:

java.net.ConnectException:连接超时:在 java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 在 java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 在 java.net.DualStackPlainSocketImpl.connect0(Native Method) 处连接。 net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(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.(Unknown Source) at java.net.Socket.(Unknown Source) at Client.main(Client.java: 18)

4

2 回答 2

1

您的代码在我的机器上正确运行。

看来这里的问题不在于您的代码,而在于您的网络设置。

你应该:

  1. 确保您的 IP 地址和端口设置正确
  2. 检查两台计算机上的防火墙设置,确保它们没有阻止流量
  3. 确保您的主机文件正确(Windows 上为 C:\Windows\system32\drivers\etc\hosts) localhost 条目可能设置不正确。
于 2013-03-13T17:02:35.827 回答
0

如果没有有关您的环境的更多信息,将很难给您一个明确的答案。

但是,最常见的原因是您没有正确转发路由器上的端口。这样做会因路由器的制造商而异,但一般来说,您需要将端口转发1111到本地 IP 地址192.168.1.100(或您正在运行的机器的本地 IP Serveur)。

旁注:当您的代码说一切都设置为 1111 时,我不确定您为什么说您的服务器正在侦听端口 4500 上的请求。

于 2013-03-13T17:04:15.427 回答