更新時(shí)間:2024-02-28 來(lái)源:黑馬程序員 瀏覽量:
創(chuàng)建一個(gè)簡(jiǎn)單的TCP服務(wù)器通常需要以下步驟:
通常需要導(dǎo)入網(wǎng)絡(luò)編程相關(guān)的庫(kù),比如Python中的socket庫(kù)。
使用socket.socket()函數(shù)創(chuàng)建一個(gè)Socket對(duì)象。指定地址族(通常是AF_INET表示IPv4)和套接字類(lèi)型(通常是SOCK_STREAM表示TCP套接字)。
使用bind()方法將Socket對(duì)象綁定到服務(wù)器的IP地址和端口號(hào)。
使用listen()方法開(kāi)始監(jiān)聽(tīng)客戶(hù)端的連接請(qǐng)求??梢灾付ㄗ畲筮B接數(shù)。
使用accept()方法接受客戶(hù)端的連接請(qǐng)求,返回一個(gè)新的Socket對(duì)象和客戶(hù)端地址。
使用新的Socket對(duì)象與客戶(hù)端進(jìn)行通信,可以使用recv()方法接收客戶(hù)端發(fā)送的數(shù)據(jù),使用send()方法發(fā)送數(shù)據(jù)給客戶(hù)端。
通信完成后,關(guān)閉與客戶(hù)端的連接。
以下是一個(gè)簡(jiǎn)單的Python代碼示例:
import socket # 創(chuàng)建Socket對(duì)象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定服務(wù)器地址和端口 server_address = ('localhost', 12345) server_socket.bind(server_address) # 監(jiān)聽(tīng)連接請(qǐng)求 server_socket.listen(5) print("等待客戶(hù)端連接...") while True: # 接受客戶(hù)端連接 client_socket, client_address = server_socket.accept() print("與客戶(hù)端 {}:{} 建立連接".format(client_address[0], client_address[1])) try: while True: # 接收客戶(hù)端發(fā)送的數(shù)據(jù) data = client_socket.recv(1024) if data: print("接收到來(lái)自客戶(hù)端的數(shù)據(jù):", data.decode()) # 發(fā)送響應(yīng)給客戶(hù)端 client_socket.sendall("服務(wù)器收到消息了".encode()) else: print("客戶(hù)端斷開(kāi)連接") break finally: # 關(guān)閉與客戶(hù)端的連接 client_socket.close()
這個(gè)簡(jiǎn)單的服務(wù)器會(huì)在本地監(jiān)聽(tīng)12345端口,當(dāng)有客戶(hù)端連接時(shí),會(huì)接收客戶(hù)端發(fā)送的數(shù)據(jù)并返回響應(yīng)。