【问题标题】:Chat program using client/server使用客户端/服务器的聊天程序
【发布时间】:2013-03-13 16:53:47
【问题描述】:

我想在 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.connect0(Native Method) 在 java.net.DualStackPlainSocketImpl.socketConnect(未知来源)在 java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(未知来源)在 java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) 在 java.net.Socket.connect(Unknown Source) 在 java.net.Socket.connect(Unknown Source) 在 java.net.Socket.(未知来源)在 java.net.Socket.(Unknown Source) at Client.main(Client.java:18)

【问题讨论】:

  • 这个异常发生在哪一边??
  • @VishalK 客户端
  • 我还有一个问题,如何从服务器向客户端发送一些消息?

标签: java client-server


【解决方案1】:

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

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

你应该:

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

【讨论】:

  • 好的,谢谢,我还有一个问题,如何从服务器向客户端发送一些消息?
【解决方案2】:

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

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

旁注:我不知道你为什么说你的服务器正在监听端口 4500 上的请求,而你的代码说一切都设置为 1111。

【讨论】:

  • 关于说我的服务器在 4500 端口上运行,只是我想告诉 1111 的一个错误
  • 如果您在网络中连接,我认为您不必进行端口转发。他没有与外部联系。
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
相关资源
最近更新 更多