Java客户端服务器聊天程序

时间:2014-04-20 17:37:24

标签: java client chat java-io

伙计们厌倦了这个客户端和服务器聊天程序PLZ帮助我 我的程序是编译和运行但问题是,当我试图将msg传递给服务器时,它无法正常工作..现在我做了什么更正...

服务器代码:

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

class serv
{
     ServerSocket s;
     Socket c;
     DataInputStream dis;
     DataOutputStream dos;
     BufferedReader disi;

     public serv()
     {
          try
          {
               s = new ServerSocket(2000,0,InetAddress.getLocalHost());
               System.out.println("Server is Created");
               c = s.accept();
               System.out.println("Request Accepted");
          }
          catch(Exception e)
          {
               System.out.println(e);
          }
     }

     public void talk()throws IOException,UnknownHostException
     {
          dis = new DataInputStream(c.getInputStream());
          dos = new DataOutputStream(c.getOutputStream());
          disi = new BufferedReader(new InputStreamReader(System.in));

          while(true)
          {
               String str = new String(disi.readLine());
               dos.writeUTF(str);
               System.out.println(str);
          }
     }

     public static void main(String args[])
     {
          try
          {
               serv c = new serv();
               c.talk();
          }
          catch(Exception e)
          {
               e.printStackTrace();
          }
     }
}

客户代码:

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

class clien
{
     Socket c;
     DataInputStream dis;
     BufferedReader disi;
     DataOutputStream dos;

     public clien()throws IOException,UnknownHostException
     {
          c=new Socket(InetAddress.getLocalHost(),2000);
          System.out.println("Request is sended");
     }

     public void talk()throws IOException,UnknownHostException
     {
          try
          {
               dis=new DataInputStream(c.getInputStream());
               dos=new DataOutputStream(c.getOutputStream());
               disi=new BufferedReader(new InputStreamReader(System.in));

              while(true)
              {
                   String str=new String(disi.readLine());
                   dos.writeUTF(str);
                   System.out.println(str);
              }
         }
         catch(Exception e)
         {
              e.printStackTrace();
         }
     }

     public static void main(String args[])
     {
          try
          {
               clien c=new clien();
               c.talk();
          }
          catch(Exception e){ }
     }
}

1 个答案:

答案 0 :(得分:0)

有很多问题。

好像你正试图做某种类似的协议:

客户端连接到服务器 客户端向服务器发送消息 服务器收到消息

点对点类型系统。不确定您是否期望将服务器视为另一个客户端(您在其中键入消息以将其发送到客户端),但问题是,当连接建立时,客户端和服务器都进入循环。在这个循环中,你只能关注一件事。

客户端: main(String []) - >连接 - >从用户读取输入(循环) 启动程序 - >连接 - >开始从服务器收听信息

服务器: main(String []) - >接受连接 - >从用户读取输入(循环)

如果您希望客户端从服务器接收信息并且能够发送信息,则需要2个线程。

 static Socket s;
 static DataOutputStream out;
 static DataInputStream in;

 public static void main(String[] args) {
      try {
           s = new Socket("host", 2000);
           out = new DataOutputStream(s.getOutputStream());
           in = new DataInputStream(s.getInputStream());

           new Thread(new Runnable() {
                public void run() {
                     Scanner scanner = new Scanner(System.in);

                     String input;
                     while(!(input = scanner.nextLine()).equals("EXITPROGRAM")) {
                          out.writeUTF(input); //sends to client
                     }
                }
           }).start();

           while(true) {
                String infoFromServer = in.readUTF();

                //you can print to console if you want
           }
      }catch(Exception e) { }
 }

现在,这将允许客户端从用户(从控制台)接收输入并从服务器接收数据。您可以为您的服务器使用相同的结构,如果这是您的目的。