網路程式設計的迴圈收發資料

2022-05-05 01:00:08 字數 2113 閱讀 6762

伺服器

from socket import *

server = socket(af_inet,sock_stream)#建立伺服器物件,套接字家族,面向網路,選擇tcp協議,udp(dgram)

host = "127.0.0.1"#設定伺服器ip

port = 8888#設定埠

base_size = 1024#設定接收檔案上限

server.bind((host,port))#繫結埠,ip

server.listen(5)#監聽

while true:

conn,addr = server.accept()#接收客戶端請求,完成了三次揮手,獲取客戶端物件和位址

while true:

try:#監測客戶端突然退出異常

msg = conn.recv(base_size)#接收資訊

if not msg:#linux系統客戶端退出不會報錯,一直發空包,故實現跨平台

conn.close()

break

print(msg.decode("utf-8"))#列印接收資訊,以什麼編碼存,以什麼編碼讀

conn.send(msg.upper())#給客戶端回資訊

except connectionreseterror:#客戶端突然退出時,關閉客戶端物件,重新進入阻塞接收客戶請求

conn.close()

break#不加的話,內層迴圈msg = conn.recv會報錯,因為套接字已關閉

server.close()

客戶端from socket import *

client = socket(af_inet,sock_stream)#建立客戶端物件,套接字家族,選擇面向網路,選擇tcp協議

host = "127.0.0.1"

port = 8888

base_size = 1024

client.connect((host,port))#鏈結伺服器,向伺服器發請求,完成三次握手

while true:

msg = input(">>>:").strip().encode("utf-8")

client.send(msg)#傳送資訊,只能傳送bytes型別

res = client.recv(base_size)#接收伺服器資訊

print(res.decode("utf-8"))

client.close()

udp迴圈輸入

伺服器from socket import *

server = socket(af_inet,sock_dgram)#建立伺服器,選擇套接字家族和udp協議

host = "127.0.0.1"

port = 8888

base_size = 1024

server.bind((host,port))#繫結埠,ip

while true:

msg,addr = server.recvfrom(base_size)#直接接收,與tcp不同,tcp接收的是資訊,udp接收的是資訊和客戶端位址

print(msg.decode("utf-8"))

server.sendto(msg.upper(),addr)#直接傳送,需要加客戶端位址

server.close()

客戶端from socket import *

client = socket(af_inet, sock_dgram)

host = "127.0.0.1"

port = 8888

base_size = 1024

while true:

msg = input(">>:").strip().encode("utf-8")

client.sendto(msg,(host,port))#傳送時需加上伺服器位址

res,addr = client.recvfrom(base_size)#接收伺服器資訊和伺服器位址

print(res.decode("utf-8"))

client.close()

tcp #好人協議,可靠性高,效率低

udp#可靠性低,不管對方收不收到,不管位址存不存在,效率高

網路程式設計(1) Socket收發

短連線 只進行一次收發就是短連線 長連線 傳送訊息後不關閉就是長連線,但會存在粘包等問題。接收 可以寫入乙個迴圈一直接收 trycatch exception e finally if outputstream null catch ioexception e catch exception e 沒...

訊息佇列程式設計收發資料

1.server.c include include include include include 用於建立乙個唯一的key 訊息結構 struct msg form int main 列印key值 printf message queue server key is d.n key 建立訊息佇列...

C 網路程式設計 1 收發乙個快遞

從事網路方面的開發有一段時間了,每天在各種瑣碎的事情中奔波,對我這種野路子出身的c 程式設計師,感覺總是欠缺點什麼。終於,思量再三,準備結束這繁雜卻無法前進寸步的工作,也暫時給自己一些時間,梳理一下自己摸索網路開發的一些東西,從簡單到複雜,一步一步的高階。希望能讓自己更進一步,也希望能幫助一些和我當...