您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python基于socket怎么實現(xiàn)TCP客戶端和服務端”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python基于socket怎么實現(xiàn)TCP客戶端和服務端”吧!
import socket # 建立socket對象 # 參數(shù)一表示IP地址類型(AF_INET為IPV4,AF_INET6為IPV6),參數(shù)二表示連接的類型(SOCK_STREAM表示TCP形式,SOCK_DGRAM表示UDP形式) client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 代表(ipv4,TCP) # 連接服務器(元組中填目標ip地址和端口號) client_socket.connect(('127.0.0.1',7777)) # 準備數(shù)據(jù),需要轉(zhuǎn)換為二進制數(shù)據(jù),encode()中填寫的是本地的字符串編碼格式,mac、linux填utf-8 data='hello'.encode('gbk') # 向服務器發(fā)送數(shù)據(jù) client_socket.send(data) # 接收數(shù)據(jù),必須要指定接收數(shù)據(jù)的大小,單位字節(jié),最大4096,即4k recv_data=client_socket.recv(1024) # 接收的數(shù)據(jù)要進行decode()解碼,發(fā)送的時候用啥編碼就填啥編碼 recv_data=recv_data.decode('gbk') print(recv_data) # 關(guān)閉連接 client_socket.close()
import socket # 建立socket對象 server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 如果服務器是一次性的,如果服務器結(jié)束后馬上重新啟動會出現(xiàn)一個錯誤,原因是地址和端口沒有被釋放 # OSError: [Errno 48] Address already in use # 如果想馬上釋放,要設(shè)置一下socket選項 server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) # 綁定IP和端口,如果在綁定IP時沒有給定IP,默認是綁定本地IP server_socket.bind(('',7777)) # 設(shè)置監(jiān)聽(最大監(jiān)聽數(shù)),設(shè)置完后服務端會進入被動模式,不能主動連接客戶端,只能被動地等待客戶端的連接 server_socket.listen(128) # 等待客戶端連接,連接上后,函數(shù)會返回客戶端的Socket對象和地址信息 client_socket,ip_port=server_socket.accept() print(f'客戶端{ip_port[0]}使用端口{ip_port[1]}連接成功...') # 接收客戶端數(shù)據(jù) data=client_socket.recv(1024) # 查看客戶端發(fā)送的數(shù)據(jù)長度 if len(data)!=0: data=data.decode('gbk') print(f'客戶端{ip_port[0]}使用端口{ip_port[1]}發(fā)送是數(shù)據(jù)是{data}') else: print(f'客戶端{ip_port[0]}使用端口{ip_port[1]}關(guān)閉了連接') # 給客戶端發(fā)送數(shù)據(jù) data='你好'.encode('gbk') client_socket.send(data) # 關(guān)閉客戶端 client_socket.close() # 關(guān)閉服務端 server_socket.close()
感謝各位的閱讀,以上就是“Python基于socket怎么實現(xiàn)TCP客戶端和服務端”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Python基于socket怎么實現(xiàn)TCP客戶端和服務端這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。