课程背景:
Socket通信是网络通信中最常用的技术之一,通过Socket建立的可靠连接,可以让多个终端与服务器保持通信,最典型的应用是建立一个多人聊天程序。
核心内容:
1.Socket通信的概念。
2.创建ServerSocket服务器。
3.客户端使用Socket与服务器通信。
Socket介绍
什么是Socket?
Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。
在Java中,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立在网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需要的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同的级别。不管是Socket还是ServerSocket他们的工作室通过Socket类及其子类完成的。
Socket连接的建立过程
- 服务器监听
- 客户端发出请求
- 建立连接
- 通信
Socket特点
- Socket基于TCP连接,数据传输有保障
- Socket适用于建立长时间连接
- Socket编程通常应用于即时通讯
ServerSocket的建立与使用
本课时讲解ServerSocket的建立与使用,使用ServerSocket监听某一端口的请求,当有访问时弹出提示。
浏览器测试:
使用ServerSocket建立聊天服务器-1
本课时讲解使用accept()方法获取与客户端的Socket链接对象,将该对象指派给一个新的线程,在线程中执行网络数据的交换。实现一对一的数据传输。
在上一节课中我们已经创建了一个ServerSocket并且在主线程中可以运行了,其实这种方法是非常不合理的因为accept()方法会造成主线程阻塞,对于有阻塞的代码需要将他放到一个独立的线程中,如下代码示例:
public class ServerListener extends Thread {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(12345);
while(true){
Socket socket = serverSocket.accept();// 对于accept函数每当有一个客户端连接到当
//前ServerSocket时accept方法都会返回一个Socket对象
//如果有多个客户端连接当前的服务器(ServerSocket)那么就会有多个Socket对象出现,所
//以在这里要创建一个while循环,循环监听来自客户端的连接
//处理accept返回的Socket,
//由于每一个accept要与一个独立的客户端进行通信所以要把这个Socket传递给一个新的线程
new ChatSocket(socket).start();
JOptionPane.showMessageDialog(null, "有客户端连接了本机12345端口");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 用于Socket通信的线程
*
*