欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

基于TCP协议的网络通信

程序员文章站 2022-04-06 23:27:35
**重点内容**1.使用InetAddress(IP地址类) 这个类有点儿奇葩,没有提供构造方法。而是有两个静态方法来实例化。 ·getByName(String host)...

**重点内容**1.使用InetAddress(IP地址类)
这个类有点儿奇葩,没有提供构造方法。而是有两个静态方法来实例化。
·getByName(String host) 通过主机名获取对应的InetAddress对象
·getByAddress(byte[] addr) 通过IP地址获取对应的InetAddress对象

getCononicalHostName() 获取IP地址的全限定域名
getHostAddress() 返回IP地址字符串
getHostName() 获取IP地址的主机名
getLocalHost() 获取本机IP地址对应的InetAddress实例

获取本机的IP地址:

InetAddress address = InetAddress.getLocalHost();
String ipAddr = address.getHostAddress();
System.out.println(ipAddr);

2.基于TCP协议的网络编程
在通信的两端各建立一个Socket,从而在两点之间形成一个虚拟的网络链路。两端的程序就可以通过虚拟链路进行通信。
Java使用Socket对象来代表两端的通信端口,并通过Socket产生的IO流来进行网络通信。

IP协议: 负责将消息从一个主机传送到另一个主机,消息在传送过程中被分割成了一个个的小包。
不能解决数据分组在传输过程中可能出现的问题。为了无差错。引入TCP协议。

TCP协议:端对端的协议,两台主机连接的时候,TCP协议为他们建立了一个连接:发送和接受数据的虚拟链路(Socket)
可以正确的把数据传输到另一端。因为,当数据传输到另一端的时候,接受端会发送一条确认消息。如果没有收到确认消息的话,则会重发。

使用ServerSocket创建TCP服务器端
用于监听来自客户端的Socket连接,如果没有连接,它会一直处于等待状态。
监听来自客户端连接请求的方法:
Socket accept() 接收到Socket请求,将会返回一个与客户端请求相对应的Socket。

创建ServerSocket
ServerSocket(int port) 指定端口创建一个ServerSocket

使用完毕后,调用ServerSocket的close方法来关闭Socket。

为了能够一直接收客户端请求,通常把accept放在死循环中

示例:

ServerSocket ss = new ServerSocket(20000);
while(true)
{
Socket socket = ss.accept();
//通过Socket进行通信
}
ss.close();

使用Socket进行通信
在客户端直接使用Socket对象。
Socket(InetAddress,int port)
创建连接到远程主机,远程端口的Socket

例如: Socket s = new Socket(“192.1.1.168”,30000);

getInputStream 输入流 从Socket中取出数据
getOutputStream 输出流 向Socket输出数据

示例: 通过本地主机作为服务端向手机发送消息

ServerSocket ss = new ServerSocket(6500);
while(true)
{
    //获取相应端口号的Socket
    Socket s = ss.accept();
    //获取输出流
    OutputStream os = s.getOutputStream();
    os.write(你好吖~.getBytes(utf-8));
    os.close();
    s.close();
}

手机作为客户端接收信息

//此处的IP地址应该是服务端的IP,端口号也要和服务端的端口相同
Socket socket = new Socket(192.168.1.1,6500);
InputStream is = socket.getInputStream();
//之后就是正常的IO操作,不写了~~