目录
Socket与ServerSocket通讯过程
1、Java语言对TCP协议网络通信使用java.net包中的Socket和ServerSocket进行支持;Socket被称为“套接字”,用来描述IP地址和端口;
Socket与ServerSocket的通讯过程简要描述如下:
2、java.net.Socket类中的构造方法和常用方法
方法声明 | 方法描述 |
---|---|
Socket(String host, int port) | 通过指定服务器的IP地址以及服务端口号创建Socket对象 |
InputStream getInputStream() | 返回与当前socket相关的输入流对象; |
OutputStream getOutputStream() | 返回与当前socket相关的输出流对象; |
3、java.net.ServerSocket类中的构造方法和常用方法:
方法声明 | 方法描述 |
---|---|
ServerSocket(int port) | 通过指定服务端口号创建ServerSocket对象 |
Socket accept() | 监听客户端的请求,并接受连接,返回一个Socket对象; |
import java.io.*;
public class IOUtils {
public static void close(Writer w) {
if (w != null) {
try {
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void close(Reader r) {
if (r != null) {
try {
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void close(OutputStream os) {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void close(InputStream is) {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketUtils {
public static void close(Socket socket) {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void close(ServerSocket serverSocket) {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端,接收客户端连接,向客户端读写数据
*/
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
BufferedReader br = null;
OutputStream outputStream = null;
BufferedWriter bw = null;
try {
//创建ServerSocket对象
serverSocket = new ServerSocket(10010);
System.out.println("服务端启动成功,等待客户端连接……");
//调用ServerSocket对象的accept方法等待客户端连接,阻塞代码,返回值是Socket对象
socket = serverSocket.accept();
System.out.println("客户端连接成功,客户端的IP地址:" + socket.getInetAddress().getHostAddress());
//连接Socket对象 获取输入流(字节输入流)
inputStream = socket.getInputStream();
//创建BufferedReader对象,转换流 new InputStreamReader(inputStream)
br = new BufferedReader(new InputStreamReader(inputStream));
//获取输出流(字节输出流)
outputStream = socket.getOutputStream();
//创建BufferedWriter对象
bw = new BufferedWriter(new OutputStreamWriter(outputStream));
//循环读写数据(往流读写数据)
while (true) {
//先读后写
//从流里读数据