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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

五、基本的Client/Server程序

以下是一个基本的客户端/服务器端程序代码。主要实现了服务器端一直监听某个端口,等待客户端连接请求。客户端根据IP地址和端口号连接服务器端,从键盘上输入一行信息,发送到服务器端,然后接收服务器端返回的信息,最后结束会话。这个程序一次只能接受一个客户连接。

ps:这个小例子写好后,服务端一直接收不到消息,调试了好长时间,才发现误使用了PrintWriter的print()方法,而BufferedReader的readLine()方法一直没有遇到换行,所以一直等待读取。我晕死~~@_@

客户端程序:
  1. package sock;

  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.Socket;
  6.   
  7. public class SocketClient {
  8.     public static void main(String[] args) {
  9.         try {
  10.             /** 创建Socket*/
  11.             // 创建一个流套接字并将其连接到指定 IP 地址的指定端口号(本处是本机)
  12.             Socket socket =new Socket("127.0.0.1",2013);
  13.             // 60s超时
  14.             socket.setSoTimeout(60000);
  15.   
  16.             /** 发送客户端准备传输的信息 */
  17.             // 由Socket对象得到输出流,并构造PrintWriter对象
  18.             PrintWriter printWriter =new PrintWriter(socket.getOutputStream(),true);
  19.             // 将输入读入的字符串输出到Server
  20.             BufferedReader sysBuff =new BufferedReader(new InputStreamReader(System.in));
  21.             printWriter.println(sysBuff.readLine());
  22.             // 刷新输出流,使Server马上收到该字符串
  23.             printWriter.flush();
  24.   
  25.             /** 用于获取服务端传输来的信息 */
  26.             // 由Socket对象得到输入流,并构造相应的BufferedReader对象
  27.             BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
  28.             // 输入读入一字符串
  29.             String result = bufferedReader.readLine();
  30.             System.out.println("Server say : " + result);
  31.   
  32.             /** 关闭Socket*/
  33.             printWriter.close();
  34.             bufferedReader.close();
  35.             socket.close();
  36.         }catch (Exception e) {
  37.             System.out.println("Exception:" + e);
  38.         }
  39.     }
  40. }
复制代码

服务器端程序:
  1. package sock;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;
  7.   
  8. public class SocketServer {
  9.     public static void main(String[] args) {
  10.         try {
  11.             /** 创建ServerSocket*/
  12.             // 创建一个ServerSocket在端口2013监听客户请求
  13.             ServerSocket serverSocket =new ServerSocket(2013);
  14.             while (true) {
  15.                 // 侦听并接受到此Socket的连接,请求到来则产生一个Socket对象,并继续执行
  16.                 Socket socket = serverSocket.accept();
  17.   
  18.                 /** 获取客户端传来的信息 */
  19.                 // 由Socket对象得到输入流,并构造相应的BufferedReader对象
  20.                 BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
  21.                 // 获取从客户端读入的字符串
  22.                 String result = bufferedReader.readLine();
  23.                 System.out.println("Client say : " + result);
  24.   
  25.                 /** 发送服务端准备传输的 */
  26.                 // 由Socket对象得到输出流,并构造PrintWriter对象
  27.                 PrintWriter printWriter =new PrintWriter(socket.getOutputStream());
  28.                 printWriter.print("hello Client, I am Server!");
  29.                 printWriter.flush();
  30.   
  31.                 /** 关闭Socket*/
  32.                 printWriter.close();
  33.                 bufferedReader.close();
  34.                 socket.close();
  35.             }
  36.         }catch (Exception e) {
  37.             System.out.println("Exception:" + e);
  38.         }finally{
  39. //          serverSocket.close();
  40.         }
  41.     }
  42. }
复制代码

0 个回复

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