日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己动手写简单的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協議的。

?3.獲取網絡的輸入和輸出流

?服務器源碼:

1 package socket; 2 3 import java.io.BufferedReader; 4 import java.io.InputStream; 5 import java.io.InputStreamReader; 6 import java.io.OutputStream; 7 import java.io.OutputStreamWriter; 8 import java.io.PrintWriter; 9 import java.net.InetAddress; 10 import java.net.ServerSocket; 11 import java.net.Socket; 12 13 public class Server { 14 public static void main(String[] args) throws Exception { 15 //創建serverSocket,并申請8080端口 16 ServerSocket ss = new ServerSocket(8080); 17 //阻塞方法,直到某個Socket連接。連接成功,產生Socket實例。 18 Socket s = ss.accept(); 19 System.out.println("有客戶端進入:"); 20 int localPort = s.getLocalPort();//獲取本地端口 21 InetAddress localAdd = s.getLocalAddress();//獲取套接字綁定的本地地址IP 22 String hostName = localAdd.getCanonicalHostName();//獲取此 IP 地址的完全限定域名 23 String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表現形式)。 24 System.out.println("本地端口為:"+localPort); 25 System.out.println("本地IP地址的完全限定域名:"+hostName); 26 System.out.println("本地IP的字符串為:"+hostAddress); 27 System.out.println("*************分割符*****************"); 28 int port = s.getPort();//獲取遠程端使用的端口 29 InetAddress inetAdd = s.getInetAddress();//獲取套接字綁定的遠程的IP 30 String inetName = inetAdd.getCanonicalHostName();//獲取此 IP 地址的完全限定域名 31 String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表現形式)。 32 System.out.println("遠程端口為:"+port); 33 System.out.println("遠程IP地址的完全限定域名"+inetName); 34 System.out.println("遠程IP的字符串為"+inetAddress); 35 InputStream is = s.getInputStream();//獲取字節輸入流 36 OutputStream os = s.getOutputStream();//獲取字節輸出流 37 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));//將字節流按照charset解析為字符,然后從字符流中讀取文本 38 PrintWriter writer = new PrintWriter(new OutputStreamWriter(os,"utf-8"));//將文本行轉換為字符,按照charset解析為字符流 39 writer.println("你好,客戶端!");//向客服端發送消息 40 writer.flush();//刷新該流的緩沖 41 String str =reader.readLine();//讀取客服端發送的消息 42 System.out.println("客戶端說:"+str); 43 s.close();//關閉socket,釋放系統資源 44 } 45 }

客戶端源碼:

1 package socket; 2 3 import java.io.BufferedReader; 4 import java.io.InputStream; 5 import java.io.InputStreamReader; 6 import java.io.OutputStream; 7 import java.io.OutputStreamWriter; 8 import java.io.PrintWriter; 9 import java.net.InetAddress; 10 import java.net.Socket; 11 12 public class Client { 13 public static void main(String[] args) throws Exception { 14 //連接的主機名為"localhost",連接到的主機8080端口。 15 Socket s = new Socket("192.168.1.103",8080); 16 int localPort = s.getLocalPort();//獲取本地端口 17 InetAddress localAdd = s.getLocalAddress();//獲取套接字綁定的本地地址IP 18 String hostName = localAdd.getCanonicalHostName();//獲取此 IP 地址的完全限定域名 19 String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表現形式)。 20 System.out.println("本地端口為:"+localPort); 21 System.out.println("本地IP地址的完全限定域名:"+hostName); 22 System.out.println("本地IP的字符串為:"+hostAddress); 23 System.out.println("*************分割符*****************"); 24 int port = s.getPort();//獲取遠程端使用的端口 25 InetAddress inetAdd = s.getInetAddress();//獲取套接字綁定的遠程的IP 26 String inetName = inetAdd.getCanonicalHostName();//獲取此 IP 地址的完全限定域名 27 String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表現形式)。 28 System.out.println("遠程端口為:"+port); 29 System.out.println("遠程IP地址的完全限定域名"+inetName); 30 System.out.println("遠程IP的字符串為"+inetAddress); 31 InputStream is = s.getInputStream();//獲取字節輸入流 32 OutputStream os = s.getOutputStream();//獲取字節輸出流 33 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));//將字節流按照charset解析為字符,然后從字符流中讀取文本 34 PrintWriter writer = new PrintWriter(new OutputStreamWriter(os,"utf-8"));//將文本行轉換為字符,按照charset解析為字符流 35 String str = reader.readLine();//接受服務器發送的信息 36 System.out.println("服務器說:"+str); 37 writer.println("服務器,你好!");//向服務器發送信息 38 writer.flush();//刷新該流的緩沖 39 s.close();//關閉socket,釋放系統資源 40 } 41 }

?

?

?

?

?

轉載于:https://www.cnblogs.com/miyin/p/3999519.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的自己动手写简单的web应用服务器(1)—tcp通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。