自己动手写简单的web应用服务器(1)—tcp通信

1.socket简介:

socket通常称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定在一个端口上,不同的端口对应不同的服务。

应用程序通常通过"套接字",向网络发出请求或者应答网络请求。socket和serverSocket类位于java.net包中。serverScoket用于服务端,socket是建立网络连接时使用的。连接成功时,应用程序两端都会产生一个socket实例,操作这个实例,完成所需的会话。

2.获取地址和端口号:

通过socket可以获取获取本地地址和端口号,以及远程地址和端口号。

服务器端源码:

 

 1 package socket;
 2 
 3 import java.net.InetAddress;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 
 7 public class Server {
 8     public static void main(String[] args) throws Exception {
 9         //创建serverSocket,并申请8080端口
10         ServerSocket ss = new ServerSocket(8080);
11         //阻塞方法,直到某个Socket连接。连接成功,产生Socket实例。
12         Socket s = ss.accept();
13         int localPort = s.getLocalPort();//获取本地端口
14         InetAddress localAdd = s.getLocalAddress();//获取套接字绑定的本地地址IP
15         String hostName = localAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
16         String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
17         System.out.println("本地端口为:"+localPort);
18         System.out.println("本地IP地址的完全限定域名:"+hostName);
19         System.out.println("本地IP的字符串为:"+hostAddress);
20         System.out.println("*************分割符*****************");
21         int port = s.getPort();//获取远程端使用的端口
22         InetAddress inetAdd = s.getInetAddress();//获取套接字绑定的远程的IP
23         String inetName = inetAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
24         String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
25         System.out.println("远程端口为:"+port);
26         System.out.println("远程IP地址的完全限定域名"+inetName);
27         System.out.println("远程IP的字符串为"+inetAddress);
28     }
29 }

 

客服端代码:

 1 package socket;
 2 
 3 import java.net.InetAddress;
 4 import java.net.Socket;
 5 
 6 public class Client {
 7     public static void main(String[] args) throws Exception {
 8         //连接的主机名为"localhost",连接到的主机8080端口。
 9         Socket s = new Socket("192.168.1.103",8080);
10         int localPort = s.getLocalPort();//获取本地端口
11         InetAddress localAdd = s.getLocalAddress();//获取套接字绑定的本地地址IP
12         String hostName = localAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
13         String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
14         System.out.println("本地端口为:"+localPort);
15         System.out.println("本地IP地址的完全限定域名:"+hostName);
16         System.out.println("本地IP的字符串为:"+hostAddress);
17         System.out.println("*************分割符*****************");
18         int port = s.getPort();//获取远程端使用的端口
19         InetAddress inetAdd = s.getInetAddress();//获取套接字绑定的远程的IP
20         String inetName = inetAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
21         String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
22         System.out.println("远程端口为:"+port);
23         System.out.println("远程IP地址的完全限定域名"+inetName);
24         System.out.println("远程IP的字符串为"+inetAddress);
25     }
26 }

注意:要先开服务器,再开客户端。可以用浏览器代替客户端,因为http协议是基于tcp/ip协议的。

 

 

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。