1. 程式人生 > >網絡編程-socket(三)(TCP和UDP)

網絡編程-socket(三)(TCP和UDP)

int ack tro 127.0.0.1 監聽 input 地址 con print

TCP

server端

import socket
sk = socket.socket() # 創建了一個socket對象
sk.bind((‘192.168.21.36‘,8080)) # 綁定一臺機器的(ip,端口)
# 回環地址 - 指向自己這臺機器
sk.listen() # 建立監聽等待別人連接
conn,addr = sk.accept() # 阻塞:在這裏等待直到接到一個連接
# conn是連接
# addr是對方的地址
print(conn)
print(addr)
conn.send(b‘hello‘) # 和對方打招呼
msg = conn.recv(1024) # 對方和我說的話
# 有發必有收 收發必相等
print(msg)
conn.close() # 掛電話
sk.close() # 關機


client端
import socket
sk = socket.socket() # 買個手機
sk.connect((‘127.0.0.1‘,8080)) # 撥號
ret = sk.recv(1024)
print(ret)
sk.send(b‘byebye!‘)
sk.close()


TCP聊天小工具
server端
import socket
sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sk.bind((‘192.168.21.36‘,9000))
sk.listen()
while True:
conn,addr = sk.accept() # 接收連接 三次握手conn
while True:
inp = input(‘>>>‘)
if inp == ‘q‘:
conn.send(inp.encode(‘utf-8‘))
break
conn.send(inp.encode(‘utf-8‘))
msg = conn.recv(1024)
if msg == b‘q‘:break
print(msg.decode(‘utf-8‘))
conn.close() # 四次揮手
sk.close()

技術分享圖片


client端
import socket
sk = socket.socket()
sk.connect((‘127.0.0.1‘,9000))
while True:
msg = sk.recv(1024)
print(msg.decode(‘utf-8‘))
if msg == b‘q‘:break
inp = input(‘>>>‘)
if inp == ‘q‘:
sk.send(inp.encode(‘utf-8‘))
break
sk.send(inp.encode(‘utf-8‘))
sk.close()

client1

技術分享圖片

再加一個client2

技術分享圖片

#server client 已建立了長連接通道,client2發送的消息只能等待,直到服務端和client1斷開

server服務端建立一個長連接,作為和client斷開後,繼續下一個連接通道,調整如下:

server端

技術分享圖片

UDP
 
 

網絡編程-socket(三)(TCP和UDP)