A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© win_top1 中级黑马   /  2014-11-13 19:56  /  952 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 服务器端:
  2. import java.net.ServerSocket;
  3. import java.net.Socket;

  4. public class MainServer
  5. {
  6.         public static void main(String[] args) throws Exception
  7.         {
  8.                 ServerSocket serverSocket = new ServerSocket(4000);
  9.                
  10.                 while(true)
  11.                 {
  12.                         Socket socket = serverSocket.accept();
  13.                        
  14.                         //启动读写线程
  15.                         new ServerInputThread(socket).start();
  16.                         new ServerOutputThread(socket).start();
  17.                 }
  18.         }
  19. }
复制代码
  1. 服务器端等待客户端传入数据的线程:
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.net.Socket;

  5. public class ServerInputThread extends Thread
  6. {
  7.         private Socket socket;
  8.        
  9.         public ServerInputThread(Socket socket)
  10.         {
  11.                 this.socket = socket;
  12.         }
  13.        
  14.         @Override
  15.         public void run()
  16.         {
  17.                 try
  18.                 {
  19.                         InputStream is = socket.getInputStream();
  20.                         System.out.println("等待客户端的输出");
  21.                         while(true)
  22.                         {
  23.                                
  24.                                
  25.                                 byte[] buffer = new byte[1024];
  26.                                
  27.                                 int length = is.read(buffer);
  28.                                
  29.                                 String str = new String(buffer, 0, length);
  30.                                
  31.                                 System.out.println(str);
  32.                         }
  33.                 }
  34.                 catch (IOException e)
  35.                 {
  36.                         e.printStackTrace();
  37.                 }
  38.         }
  39. }
复制代码
  1. 服务器端向客户端传递数据的线程:
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;
  6. import java.net.Socket;

  7. public class ServerOutputThread extends Thread
  8. {
  9.         private Socket socket;

  10.         public ServerOutputThread(Socket socket)
  11.         {
  12.                 this.socket = socket;
  13.         }

  14.         @Override
  15.         public void run()
  16.         {
  17.                 try
  18.                 {
  19.                         OutputStream os = socket.getOutputStream();
  20.             System.out.println("服务器端请输入:");
  21.                         while(true)
  22.                         {
  23.                                
  24.                                 BufferedReader reader = new BufferedReader(new InputStreamReader(
  25.                                                 System.in));
  26.                                
  27.                                 String line = reader.readLine();
  28.                                
  29.                                 os.write(line.getBytes());
  30.                         }
  31.                 }
  32.                 catch (IOException e)
  33.                 {
  34.                         e.printStackTrace();
  35.                 }
  36.         }
  37. }
复制代码
  1. 客户端:
  2. import java.io.*;
  3. import java.net.Socket;

  4. public class MainClient
  5. {
  6.         public static void main(String[] args) throws Exception, IOException
  7.         {
  8.                 Socket socket = new Socket("localhost", 6000);

  9.                 new ClientInputThread(socket).start();
  10.                 new ClientOutputThread(socket).start();

  11.      
  12.         }
  13. }
复制代码
  1. 客户端准备接收服务器端数据的线程:
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.net.Socket;

  5. public class ClientInputThread extends Thread
  6. {
  7.         private Socket socket;
  8.        
  9.         public ClientInputThread(Socket socket)
  10.         {
  11.                 this.socket = socket;
  12.         }
  13.        
  14.         @Override
  15.         public void run()
  16.         {
  17.                 try
  18.                 {
  19.                         InputStream is = socket.getInputStream();
  20.                         System.out.println("等待服务器端的输出:");
  21.                         while(true)
  22.                         {
  23.                                
  24.                                 byte[] buffer = new byte[1024];
  25.                                
  26.                                 int length = is.read(buffer);
  27.                                
  28.                                 String str = new String(buffer, 0, length);
  29.                                
  30.                                 System.out.println(str);
  31.                         }
  32.                 }
  33.                 catch (IOException e)
  34.                 {
  35.                         e.printStackTrace();
  36.                 }
  37.         }
  38. }
复制代码
  1. 客户端准备向服务器端传递数据的线程:
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;
  6. import java.net.Socket;

  7. public class ClientOutputThread extends Thread
  8. {
  9.         private Socket socket;

  10.         public ClientOutputThread(Socket socket)
  11.         {
  12.                 this.socket = socket;
  13.         }

  14.         @Override
  15.         public void run()
  16.         {
  17.                 try
  18.                 {
  19.                         OutputStream os = socket.getOutputStream();
  20.             System.out.println("等待客户端输入:");
  21.                         while (true)
  22.                         {
  23.                                
  24.                                 BufferedReader reader = new BufferedReader(
  25.                                                 new InputStreamReader(System.in));

  26.                                 String line = reader.readLine();

  27.                                 os.write(line.getBytes());
  28.                         }
  29.                 }
  30.                 catch (IOException e)
  31.                 {
  32.                         e.printStackTrace();
  33.                 }
  34.         }
  35. }
复制代码
开启服务器后,再开多个客户端的时候,当服务器向客户端发送数据的时候,为什么有的客户端能接收到服务器传递的数据,有的客户端不能接收到?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马