繁体   English   中英

Java客户端服务器聊天程序

[英]Java Client Server Chat Program

伙计们讨厌这个客户端和服务器聊天程序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){ }
     }
}

有很多问题。

似乎您正在尝试执行以下某种协议:

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

对等类型的系统。 不知道您是否希望服务器被视为另一个客户端(您在其中键入消息以将其发送给客户端),但是问题是,当建立连接时,客户端和服务器都陷入了循环。 在此循环中,您只能关注一件事。

客户端: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) { }
 }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM