TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
今天利用java的封装了TCP协议的类 ---- java.net.Socket; java.net.ServerSocket;使用它们可以与远端计算机通讯。
实现聊天室的案例的要点:
1)客户端实例化Socket时需要传入两个参数:服务端计算机的地址信息(IP地址);服务端计算机上运行的服务端应用程序申请的服务端口;
通过IP可以找到服务端的计算机,通过端口可以连接到运行在服务端计算机上的服务端应用程序。
实例化Socket的过程就是连接服务端的过程,若服务端无响应,实例化过程会抛出异常。
端口号是一个整数,2字节内的整数0-65535,但3000以内的端口号不要使用,因为紧密的绑定着系统程序,和世界上流行的应用程序。10000以上也很少被使用。
2)运行在服务端的ServerSocket主要负责两个工作:
向系统申请服务端口,客户端就是通过这个端口与服务端应用程序建立连接的。
监听服务端口,一旦客户端通过该端口尝试连接时,ServerSocket就会实例化一个Socket与该客户端通讯。
3)客户端用户输入等待时不能耽误服务端返回信息,因此要多线程实现不输入也能同时接收信息。
服务端要能够接收多个客服端,因此要多线程与读取信息分开。
由于服务端要返回对每个客户端返回不同线程输出流的信息,需将不同线程中的输出流装入集合,并遍历信息返回客户端,并在客户端离线时清除该输出流
客户端具体代码如下:
服务端具体代码如下:
内部类实现Runnable为线程的任务
最后效果为(自己客户端连自己服务端):