一、Socket编程

在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。

二、案例

 1.服务端

  • ① 创建ServerSocket对象,绑定监听端口
  • ② 通过accept()方法监听客户端请求
  • ③ 连接建立后,通过输入流读取客户端发送的请求信息
  • ④ 通过输出流向客户端发送相应信息
  • ⑤ 关闭相关资源
1 package cn.kgc.sockettest.demo1;
 2 
 3 import java.io.*;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 
 7 /**
 8  * 服务端
 9  *
10  * @author
11  * @create 2019-07-23 14:16
12  **/
13 public class server {
14     public static void main(String[] args) {
15         try {
16             ServerSocket serverSocket = new ServerSocket(8080);
17             System.out.println("服务器启动完成...监听启动!");
18             //开启监听,等待客户端的访问
19             Socket socket = serverSocket.accept();
20             // 获取输入流,因为是客户端向服务器端发送了数据
21             InputStream inputStream = socket.getInputStream();
22             // 创建一个缓冲流
23             BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
24             String info = null;
25             while ((info = br.readLine())!=null){
26                 System.out.println("这里是服务端 客户端是:"+info);
27             }
28             //向客户端做出响应
29             OutputStream outputStream = socket.getOutputStream();
30             info = "这里是服务器端,我们接受到了你的请求信息,正在处理...处理完成!";
31             outputStream.write(info.getBytes());
32             outputStream.close();
33         } catch (IOException e) {
34             e.printStackTrace();
35         }
36     }
37 }
2.客户端
  • ① 创建Socket对象,指明需要连接的服务器的地址和端口号
  • ② 连接建立后,通过输出流想服务器端发送请求信息
  • ③ 通过输入流获取服务器响应的信息
  • ④ 关闭响应资源
package cn.kgc.sockettest.demo1;

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

/**
 * 客户端
 *
 * @author
 * @create 2019-07-23 14:17
 **/
public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost",8080);
            OutputStream outputStream = socket.getOutputStream();
            String info = "你好啊!";
            //输出!
            outputStream.write(info.getBytes());
            socket.shutdownOutput();
            //接收服务器端的响应
            InputStream inputStream = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
            while ((info = br.readLine())!=null){
                System.out.println("接收到了服务端的响应!" + info);
            }
            //刷新缓冲区
            outputStream.flush();
            outputStream.close();
            inputStream.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

然后,先执行服务端,再执行客户端的代码就可以了。这只是个小案例,有什么不足之处,请各位指教!