zoukankan      html  css  js  c++  java
  • Java 网络编程案例一:一台客户端与服务器单次通信

    需求:客户端连接服务器,连接成功后给服务发送“Hello,服务器!”,服务器收到消息后,给客户端返回“欢迎登录”。

      服务器端程序示例代码:

     1 import java.io.InputStream;
     2 import java.io.OutputStream;
     3 import java.net.ServerSocket;
     4 import java.net.Socket;
     5 
     6 public class Server {
     7 
     8     public static void main(String[] args)throws Exception {
     9         //1、准备一个ServerSocket对象,并绑定8888端口
    10         ServerSocket server =  new ServerSocket(8888);
    11         System.out.println("等待连接....");
    12         
    13       //2、在8888端口监听客户端的连接,该方法是个阻塞的方法,如果没有客户端连接,将一直等待
    14         Socket socket = server.accept();
    15         System.out.println("一个客户端连接成功!!");
    16         
    17         //3、获取输入流,用来接收该客户端发送给服务器的数据
    18         InputStream input = socket.getInputStream();
    19         //接收数据
    20         byte[] data = new byte[1024];
    21         StringBuilder s = new StringBuilder();
    22         int len;
    23         while ((len = input.read(data)) != -1) {
    24             s.append(new String(data, 0, len));
    25         }
    26         System.out.println("客户端发送的消息是:" + s);
    27                 
    28         //4、获取输出流,用来发送数据给该客户端
    29         OutputStream out = socket.getOutputStream();
    30         //发送数据
    31         out.write("欢迎登录".getBytes());
    32         out.flush();
    33         
    34         //5、关闭socket,不再与该客户端通信
    35         //socket关闭,意味着InputStream和OutputStream也关闭了
    36         socket.close();
    37         
    38         //6、如果不再接收任何客户端通信,可以关闭ServerSocket
    39         server.close();
    40     }
    41 }

      客户端程序示例代码:

     1 import java.io.InputStream;
     2 import java.io.OutputStream;
     3 import java.net.Socket;
     4 
     5 public class Client {
     6 
     7     public static void main(String[] args) throws Exception {
     8         // 1、准备Socket,连接服务器,需要指定服务器的IP地址和端口号
     9         Socket socket = new Socket("127.0.0.1", 8888);
    10 
    11         // 2、获取输出流,用来发送数据给服务器
    12         OutputStream out = socket.getOutputStream();
    13         // 发送数据
    14         out.write("Hello,服务器!".getBytes());
    15         //会在流末尾写入一个“流的末尾”标记,对方才能读到-1,否则对方的读取方法会一致阻塞
    16         socket.shutdownOutput();
    17         
    18         //3、获取输入流,用来接收服务器发送给该客户端的数据
    19         InputStream input = socket.getInputStream();
    20         // 接收数据
    21         byte[] data = new byte[1024];
    22         StringBuilder s = new StringBuilder();
    23         int len;
    24         while ((len = input.read(data)) != -1) {
    25             s.append(new String(data, 0, len));
    26         }
    27         System.out.println("服务器返回的消息是:" + s);
    28         
    29         //4、关闭socket,不再与服务器通信,即断开与服务器的连接
    30         //socket关闭,意味着InputStream和OutputStream也关闭了
    31         socket.close();
    32     }
    33 }

      注意:运行程序时,必须先启动服务器程序,主动接受客户端程序的连接请求。

  • 相关阅读:
    Freezable 对象(WPF)
    排序算法
    属性,构造函数,枚举
    .net 4.0新特性CountDownEvent
    WPF的动画(1)基本动画
    MEF(Managed Extensibility Framework)学习笔记
    WPF依赖属性(续)(4)依赖属性与数据绑定
    [你必须知道的.NET] 第六回:深入浅出关键字base和this
    [你必须知道的.NET] 第三回:历史纠葛:特性和属性
    用命令行部分解决 CNNIC 证书问题
  • 原文地址:https://www.cnblogs.com/niujifei/p/12291694.html
Copyright © 2011-2022 走看看