基本介绍
1、套接字(Socket)开发网络应用程序被广泛采用。以至于成为事实上的标准。
2、通信的两端都要有Socket,是两台机器间通信的端点。
3、网络通信其实就是Socket通信
4、Socket运行程序把网络当成一个流,数据在两个Sokcet间通过IO传输。
5、一般主动发起通信的应用程序属于客户端。等待通信请求的为服务端
客户端
package com.work.socket.demo02;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
/**
* 客户端
*
* @author simon
* @date 2022/6/20 19:08
* @version 1.0
**/
public class SocketClient {
public static void main(String[] args) {
try {
// 1、建立连接
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println(" 客户端连接成功 ");
// 获取输出流
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hello word".getBytes());
// 标识写入结束。否则一直卡顿
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int data = 0;
while ((data = inputStream.read(buf)) != -1) {
// 根据读取到的实际长度展示字符串
System.out.println("client读取的数据 = " + new String(buf, 0, data));
}
// 关闭流
outputStream.close();
System.out.println(" 客户端退出了 " );
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端
package com.work.socket.demo02;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
*
* @author simon
* @date 2022/6/20 19:08
* @version 1.0
**/
public class SocketServer {
public static void main(String[] args) {
try {
// 1、在本地创建socket通信;端口 9999
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("等待连接 。。。 ");
// 当客户端没有连接到9999接口时,会一直阻塞等待。连接成功得到一个socket。
// 一个ServerSocket可以得到多个Socket。但是socket连接也有上限。意思就是可以存在多个客户端。这里就会存在多线程问题
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
byte[] buf = new byte[1024];
int data = 0;
while ((data = inputStream.read(buf)) != -1) {
// 根据读取到的实际长度展示字符串
System.out.println("server读取的数据 = " + new String(buf, 0, data));
}
OutputStream outputStream = accept.getOutputStream();
outputStream.write("word, hello...".getBytes());
System.out.println(" 客户端退出了 ");
// 标识写入结束
accept.shutdownInput();
inputStream.close();
outputStream.close();
accept.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}