1. 程式人生 > >socket模組,簡單的套接字,加迴圈

socket模組,簡單的套接字,加迴圈

服務端:

 

import socket

#1.買手機
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式協議,
print(phone) #是用來接收連結請求,從而建立連結的

# phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# print(phone)


#2.插手機卡
phone.bind(('127.0.0.1',8080)) #0-65535

#3.開機
phone.listen(5) # 同一時刻最大請求數為5個

print('start....')

#4.等待電話請求
conn,client_addr=phone.accept() #(雙向連結的套接字物件,存放客戶端ip和埠的小元組)
# print(conn) # conn代表雙向連結,用來收發訊息
# print(client_addr)

#5.收\發訊息
data=conn.recv(1024) #1024接收的最大位元組數bytes
print('收到客戶的資料',data)
conn.send(data.upper())

#6.掛電話連結
conn.close()

#7.關機
phone.close()


客戶端:

 

import socket

#1.買手機
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式協議,


#2.撥號
phone.connect(('127.0.0.1',8080))

#3.發\收訊息
phone.send('hello'.encode('utf-8')) # 只能發bytes型別
data=phone.recv(1024)
print('收到服務端的訊息: ',data)

#4.掛電話連結
phone.close()


通訊迴圈模板:

服務端:

 

import socket

iphone = socket.socket()

iphone.bind(('127.0.0.1',5000))

iphone.listen()

while True:
client,addr = iphone.accept()

print(type(client),client,type(addr),addr)
while True:
try:
data = client.recv(1024)
if not data:
client.close()
break

print('收到客戶端訊息:%s'% data.decode('utf-8'))
client.send(data.upper())
except ConnectionResetError:
print('客戶端強行關閉了連線')
client.close()
break
client.close()
iphone.close()



客戶端:

import socket

iphone = socket.socket()

iphone.connect(('127.0.0.1',5000))

while True:
msg = input('>>: ').strip()
iphone.send(msg.encode('utf-8'))
data = iphone.recv(1024)
print('收到服務端訊息:%s'%data.decode('utf-8'))

iphone.close()



基於UDP的通訊迴圈:

服務端:


import socket

# UDP協議 在建立socket是 只有一個型別不同
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,proto=0)

server.bind(("127.0.0.1",8888))


while True:
data,addr = server.recvfrom(1024) # 阻塞 直到收到資料為止
print("收到來自%s的訊息:%s" % (data.decode("utf-8"),addr[0]))
# 返回值為 資料 和 對方ip地址 和埠號
server.sendto(data.upper(),addr)

print(res)
server.close()


# 寫一個UDP的多人聊天程式
#


客戶端:


import socket

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)



while True:
data = input(">>:").encode("utf-8")
client.sendto(data,("127.0.0.1",8888))
d,addr = client.recvfrom(1024)
print(d.decode("utf-8"))

client.close()