先看一下Socket与ServerSocket的交互:
简单流程:
服务器端:
1.创建ServerSocket对象,绑定监听端口
ServerSocket serverSocket = new ServerSocket(18901);//服务端socket必须要指定端口(监听端口)
2.通过accept()方法监听客户端请求
Socket socket = serverSocket.accept();//如果有请求过来,接受,得到客户端的socket信息
3.连接建立后,通过输出流读取客户端发送的请求信息
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
4.通过输出流向客户端发送响应信息
OutputStream outputStream = socket.getOutputStream();
5.关闭相关资源
socket.close();
serverSocket.close();
客户端:
1.创建Socket对象,指明需要连接的服务器的地址和端口号
Socket socket = new Socket("111.11.11.111", 18901);//IP 端口号(1024以上)
2.连接建立后,通过输出流向服务器端发送请求信息
OutputStream outputStream = socket.getOutputStream();//向外发
outputStream.write("你好,我是客户端".getBytes());
socket.shutdownOutput();//发送完毕,将socket输出流关掉
3.通过输入流获取服务器响应的信息
InputStream inputStream1 = socket.getInputStream();//
byte[] buffer1 = new byte[1024];
int len = 0;
while ((len = inputStream1.read(buffer1)) !=-1){
System.out.println(new String(buffer1, 0, len));
}
4.关闭相关资源
socket.close();//Socket关掉
以下是发送端的代码:
/*
* 发送数据的
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
System.out.println("客户端启动");
Socket socket = new Socket("111.11.11.111", 18901);//IP 端口号(1024以上)
OutputStream outputStream = socket.getOutputStream();//向外发
outputStream.write("你好,我是客户端".getBytes());
socket.shutdownOutput();//发送完毕,将socket输出流关掉
/**
* 读
*/
InputStream inputStream1 = socket.getInputStream();//
byte[] buffer1 = new byte[1024];
int len = 0;
while ((len = inputStream1.read(buffer1)) !=-1){
System.out.println(new String(buffer1, 0, len));
}
socket.close();//Socket关掉
}
}
以下是服务端的代码:
/*
* 服务端
* 先启动
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
System.out.println("服务器启动");
ServerSocket serverSocket = new ServerSocket(18901);//服务端socket必须要指定端口(监听端口)
Socket socket = serverSocket.accept();//如果有请求过来,接受,得到客户端的socket信息
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
OutputStream outputStream = socket.getOutputStream();
outputStream.write("你好,这里是服务端".getBytes());
socket.shutdownOutput();
socket.close();
serverSocket.close();
}
}