當前位置:編程學習大全網 - 編程語言 - 網絡編程端口號

網絡編程端口號

1.IP地址和端口號

如果網絡中的計算機需要相互通信,必須為每臺計算機分配壹個標識號,接收數據和發送數據的計算機必須通過標識號來識別。TCP/IP協議中的“logo”就是IP地址。

壹臺計算機可以同時運行多個網絡程序。使用IP地址可以向計算機發送數據,但不能保證數據會提交給哪個網絡程序。因此,每個發送的網絡分組的報頭都具有“端口”部分,該部分是整數,用於指示數據幀被移交給哪個應用程序進行處理。同時,您必須為網絡程序指定端口號,以便不同的應用程序可以在不同的端口上接收數據。

同壹臺計算機上不能存在使用同壹端口的多個程序。端口號的範圍為0-65535,其中0-1023之間的端口號用於知名網絡服務和應用,1024以上的端口號用於普通應用,可以避免端口號所代表的網絡程序的串擾。

2.TCP和UDP

TCP是傳輸控制協議,UDP是用戶數據報協議。TCP是壹種面向連接的通信協議,它在兩臺計算機之間提供可靠且無錯誤的數據傳輸。當應用程序使用TCP進行通信時,將在數據源和目標之間建立虛擬連接。壹旦連接建立,數據就可以在兩臺計算機之間以雙向字節流的形式進行交換。

UDP是壹種無連接的通信協議,不保證數據的可靠傳輸,但可以實現向多個目標發送數據的功能。

3.3簡介。(電源)插座

Socket(套接字)是網絡驅動層為應用程序提供的接口和機制,其功能可以看作是為應用程序創建的端口dock。

4.概述4。TCP網絡編程

TCP協議的具體操作步驟如下:

(1)服務器程序創建ServerSocket對象,並調用accept()方法等待客戶端連接。

(2)客戶端程序創建壹個Socket對象來建立與客戶端的專線連接。

(3)服務器接收客戶端的連接請求,創建新的Socket對象,與客戶端建立專線連接。

(4)在步驟(2)和(3)中建立的兩個套接字可以在同壹線程上對話。

(5)服務器再次等待新的連接請求。

5.ServerSocket類

TCP網絡服務器程序的編寫需要使用ServerSocket類來創建服務器。

ServerSocket類的主要方法如下:

方法類型描述

公共ServerSocket(int port)構造函數創建壹個ServerSocket實例。

公共套接字accept()方法等待客戶端連接。

公共的inetaddress get inetaddress()方法返回服務器的IP地址。

public boolean isClosed()方法返回ServerSocket的關閉狀態。

publicovoid close()方法關閉服務器套接字。

服務器每次運行都需要調用accept()方法等待客戶端連接。執行此方法後,服務器將進入阻塞狀態,直到客戶端再次連接。accept()方法的返回類型是Socket。

6.套接字類

客戶端必須創建套接字對象來建立與服務器的連接,每個套接字對象代表壹個客戶端。

Socket類的常用方法如下:

方法類型描述

public Socket (string host,int port)構造函數創建壹個Socket對象,並指定要連接的服務器的主機名和商品號。

公共輸入流get input stream()方法返回套接字的輸入流。

公共輸出流get output stream()方法返回套接字的輸出流。

public boolean isClosed()方法返回套接字的關閉狀態。

public void close()方法關閉這個套接字。

註意:TCP網絡編程中的信息以iostream的形式傳輸。

7.TCP服務器程序

編寫TCP服務器程序,代碼如下:

包com

導入Java . net . *;

導入Java . io . *;

公共類TcpServer{

公共靜態void main(String []a){

ServerSocket server = null

Socket socket = null

BufferedReader in = null

PrintWriter out = null

嘗試{

//服務器監聽端口9000。

server = new server socket(9000);

//接收客戶端連接

socket = server . accept();

//獲取客戶端輸入的信息。

in = new buffered reader(new InputStreamReader(socket . getinputstream()));

//向客戶端輸出信息,true則自動刷新緩沖區。

out = new PrintWriter(socket . get output stream(),true);

Out.println("與服務器建立連接");

string info = in . readline();

System.out.println("客戶端的輸入為:"+info ");

}catch(異常e){

e . printstacktrace();

}

最後{

嘗試{

in . close();

out . close();

socket . close();

server . close();

}catch(異常e){

e . printstacktrace();

}

}

}

}

為了驗證服務器端程序能否正常工作,程序還需要提供客戶端程序與服務器進行通信。Windows系統中的Telnet程序是系統自帶的TCP客戶端。telnet可用於測試與服務器的通信。運行telnet時,指定連接服務器的IP地址和端口號。壹旦建立了連接,telnet程序窗口就可以將輸入發送到服務器,並顯示從服務器收到的數據。測試步驟如下:

(1)運行服務器程序

(2)在DOS窗口中運行telnet 127 . 0 . 0 . 1 9000。因為服務器端程序和客戶端程序在同壹臺機器上,所以可以用127.0.0.1來表示這臺機器。

註意:壹次調用accept()方法只能接受壹個連接。要接受多個連接,方法要放在壹個循環語句中,每個連接的數據輸入輸出也要放在壹個循環語句中,這樣才能實現服務器和客戶端的連續交換。

類服務實現Runnable{

Socket socket = null

BufferedReader in = null

PrintWriter out = null

公共服務(套接字套接字){

this.socket = socket

}

公共無效運行(){

//獲取客戶端輸入的信息。

in = new buffered reader(new InputStreamReader(socket . getinputstream()));

//向客戶端輸出信息,true則自動刷新緩沖區。

out = new PrintWriter(socket . get output stream(),true);

//循環讀取客戶端數據,並將數據寫入客戶端。

while(true){

Out.println("與服務器建立連接");

System.out.println("客戶端說:"+in . readline());

}

}

捕捉(異常e){

e . printstacktrace();

}

最後{

嘗試{

in . close();

out . close();

socket . close();

server . close();

}catch(異常e){

e . printstacktrace();

}

}

}

}

公共類TcpServer{

ServerSocket server = null

Socket socket = null

嘗試{

//服務器監聽端口9000。

server = new server socket(9000);

//接收多個客戶端連接

while(true){

socket = server . accept();

新線程(新服務(套接字))。start();

}catch(異常e){

e . printstacktrace();

}

}

}

8.TCP客戶端程序

包com

導入Java . net . *;

導入Java . io . *;

公共類TcpClient{

公共靜態void main(String []a){

ServerSocket server = null

Socket socket = null

BufferedReader in = null

BufferedReader輸入= null

PrintWriter out = null

嘗試{

socket =新插座(" 127.0.0.1 ",9000);

while(true){

input=new BufferedReader(新InputStreamReader(system . in));

in = new buffered reader(new InputStreamReader(socket . getinputstream()));

}

//向服務器輸出信息,true則自動刷新緩沖區。

out = new PrintWriter(socket . get output stream(),true);

Out.println("客戶端說:"+input . readline);

string info = in . readline();

System.out.println("服務器說:"+info);

}catch(異常e){

e . printstacktrace();

}

}

}

9.UDP網絡編程

(1)DatagramSocket類主要用於發送和接收信息。

DatagramSocket類的主要方法:

方法類型描述

公共DatagramSocket()構造函數在不指定監聽端口的情況下構造DatagramSocket對象。

公共DatagramSocket(int port)構造函數構造DatagramSocket對象來指定偵聽端口。

public void send(DatagramPacket p)方法發送數據報。

public void receive(數據報數據包p)方法接收數據報。

(2)DatagramPacket類

DatagramPacket類用於包裝要發送或接收的壹條信息。需要構造DatagramPacket對象來發送和接收數據。

DatagramPacket類的主要方法:

方法類型描述

公共DatagramPacket (byte [] buf,in length)構造函數在構造數據報包對象時指定內存空間和大小。

公共數據報包(byte [] buf,長度,inetaddress地址,int端口)同上。

public byte[] getData()方法返回接收到的數據。

public int getLength()方法返回發送或接收的數據長度。

公共InetAddress getAddress()方法返回機器的地址。

(3)在課堂上

InetAddress類用於表示計算機地址,主要方法如下:

方法類型描述

公共靜態InetAddress get byname(string host)方法通過主機名或IP地址獲取inet address對象。

public String getHostName()方法獲取IP地址對應的主機名。

公共字符串getHostAddress()方法返回壹個IP地址字符串。

10.UDP編程

編寫UDP網絡程序需要分別編寫發送程序和接收程序。

(1)發送方

包com

導入Java . net . *;

公共類UdpSend{

公共靜態void main(String [] a){

DatagramSocket ds = null

DatagramPacket dp = null

byte[]buf =新字節[1024];

嘗試{

//DatagramSocket類用於完成消息的發送。

ds = new datagram socket();

String info = " hello world

DP = new datagram packet(info . getbytes(),info.length,inet address . get byname(" localhost "),3000);

//發送數據包

ds . send(DP);

}catch(異常e){

e . printstacktrace();

}

最後

{

ds . close();//消息發送後,關閉對象。

}

}

}

(2)接收程序

包com

導入Java . net . *;

公共類UdpRecv{

公共靜態void main(String [] a){

DatagramSocket ds = null

DatagramPacket dp = null

byte[]buf =新字節[1024];

嘗試{

//DatagramSocket類用於完成消息的發送。

ds = new datagram socket();

dp =新的DatagramPacket(buf,1024);

//接收發送方發送的數據

dsreceive(DP);

String str=new String(dp.getData(),0,DP . getlength());

str = str+" from "+DP . get address . gethostaddress();

system . out . println(str);

}catch(異常e){

e . printstacktrace();

}

最後

{

ds . close();//消息發送後,關閉對象。

}

}

}

  • 上一篇:什麽是上下文
  • 下一篇:NBA的24秒計時器是怎樣控制的?
  • copyright 2024編程學習大全網