使用客户端/服务器聊天程序

时间:2013-03-13 16:53:47

标签: java client-server

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

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

这是我尝试过的代码:

对于Serveur:

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:连接超时:connect at   java.net.DualStackPlainSocketImpl.connect0(Native Method)at   java.net.DualStackPlainSocketImpl.socketConnect(未知来源)at   java.net.AbstractPlainSocketImpl.doConnect(未知来源)at   java.net.AbstractPlainSocketImpl.connectToAddress(未知来源)at   java.net.AbstractPlainSocketImpl.connect(未知来源)at   java.net.PlainSocketImpl.connect(未知来源)at   java.net.SocksSocketImpl.connect(未知来源)at   java.net.Socket.connect(未知来源)at   java.net.Socket.connect(未知来源)at   java.net.Socket。(未知来源)at   Client.main上的java.net.Socket。(未知来源)(Client.java:18)

2 个答案:

答案 0 :(得分:1)

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

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

你应该:

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

答案 1 :(得分:0)

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

但是,最常见的原因是您没有正确转发路由器上的端口。这样做会有所不同,具体取决于路由器的制造商,但是,一般来说,您需要将端口1111转发到本地IP地址192.168.1.100(或者您机器的本地IP是什么)重新运行Serveur

旁注:我不知道为什么你说服务器正在侦听端口4500上的请求,当你的代码说明所有内容都设置为1111时。