广域网和局域网
介绍socket通信前我们先介绍一下广域网与局域网的概念。局域网简称LAN,是指在某一区域几台计算机组成的计算机组,局域网是封闭的,局域网经常采用共享信道,即共用同一条电缆。广域网简称WAN,是一种跨越大的,地域性的地区性网络集合广域网包含大大小小不同的子网,可以是局域网,也可以是小型的广域网。广域网为每个单元分配IP地址,局域网也会其单元分配IP地址,这两个IP地址互不干扰,一个对内,一个对外,局域网的IP只对其内部的计算机有效,它们可以通过IP相互访问。如果你把一台计算机连接到互联网,网络提供商则会为你分配一个外网的IP。由此可见,IP地址将是我们接下来介绍的socket通信需要用到的参数,这也是一个地址,来找到你要连接的计算机。在socket中我们除了用到IP还需要找到端口号,一个IP地址的端口通过16bit进行编号,最多可以有65536个端口。端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535,一台主机可以有不同服务,即通过端口号进行区分。总之,我们通过IP地址+端口号来找到特定计算机的特定服务。
什么是socket通信
socket通信及网络上的两个程序通过一个双向的通信连接实现数据交换,这个连接的一段称为一个socket,java中通过TCP握手协议(三次握手)为用户提供编程接口。所谓“三次握手”即对每次发送的数据量进行跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后撤消联系,并建立虚连接。java内部有相应的包,我们要学会如何去调用,接下来我们介绍一下怎么写一个简易的可以实现两个程序通过socket通信实现对话的程序。
socket通信程序实现
程序分为服务器和客户端两个部分
1、服务器:
public class Server {
// IP
// 端口号
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(9999); // 创建服务器
System.out.println("服务器。。。。。。。。。。");
Socket socket = serverSocket.accept(); // 处于阻塞,等待监听。每接受一个线程,生成一个新用户。
InputStream in = socket.getInputStream