Socket通常用来实现客户方和服务方的连接,是TCP\IP协议的一个十分流行的编程接口。
通信结构
第一步,客户端和服务端都建立相应的socket对象(包括目的IP地址和端口号)客户端的Socket对象是显示地调用new完成的,服务端的Socket是由ServerSocket的Appect方法产生的。
第二步,显式或隐式(系统默认本机一个可用的IP地址和端口)地绑定操作。
第三步,以流的方式进行通讯。Server端Socket监听某个端口的请求,Client端向Server端发出请求,Server端接受请求,并向Client回应消息。
第四步,关闭Socket通讯。
服务端:
//1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
ServerSocket serverSocket =newServerSocket(
10086
);
//1024-65535的某个端口
//2、调用accept()方法开始监听,等待客户端的连接
Socket socket = serverSocket.accept();
//3、获取输入流,并读取客户端信息
InputStream is = socket.getInputStream();
InputStreamReader isr =newInputStreamReader(is);
BufferedReader br =newBufferedReader(isr);
String info =
null
;
while
((info=br.readLine())!=
null
){
System.out.println(
"Hello,我是服务器,客户端说:"
+info);
}
socket.shutdownInput();
//关闭输入流
//4、获取输出流,响应客户端的请求
OutputStream os = socket.getOutputStream();
PrintWriter pw =
new
PrintWriter(os);
pw.write(
"Hello World!"
);
pw.flush();
//5、关闭资源
pw.close();
os.close();
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();
客户端:
//1、创建客户端Socket,指定服务器地址和端口
Socket socket =newSocket(
"127.0.0.1"
,
10086
);
//2、获取输出流,向服务器端发送信息
OutputStream os = socket.getOutputStream();
//字节输出流
PrintWriter pw =newPrintWriter(os);
//将输出流包装成打印流
pw.write(
"用户名:admin;密码:admin"
);
pw.flush();
socket.shutdownOutput();
//3、获取输入流,并读取服务器端的响应信息
InputStream is = socket.getInputStream();
BufferedReader br =
new
BufferedReader(
new
InputStreamReader(is));
String info =
null
;
while
((info=br.readLine())!
null
){
System.out.println(
"Hello,我是客户端,服务器说:"
+info);
}
//4、关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();