題目1
1.編寫程序實現基於多線程的TCP客戶機/服務器程序。
(1)創建服務器端套接字Socket,監聽客戶端的連接請求;
(2)創建客戶端套接字Socket,向服務器端發起連接;
服務器端套接字
1. import socket
2.
3. # 服務器端套接字
4. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
5. # 監聽本機9999端口號
6. server.bind(('127.0.0.1', 9999))
7. # 開始監聽,5代表等待連接的最大數量
8. server.listen(5)
9. while True:
10. # accept()會等待並返回一個客戶端的連接:
11. sock,addr = server.accept()
12. print(addr)
13. # print(sock)
14. data = sock.recv(1024)
15. print(data.decode('utf-8'))
16. sock.close()
客戶端套接字
1. import socket
2. client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3.
4. client.connect(('127.0.0.1',9999))
5.
6. client.send(b'abc') # 字節形式發送
7.
8. client.close()
運行時,先啓動服務器端,再啓動客戶端
啓動服務器端後,服務器即使在接收到客戶端發來的數據後,也不會自動關閉。
運行結果如下:
客戶端發送數據完成後就關閉了。
題目2
2.編寫程序實現基於UDP的客戶端/服務器程序。
(1)創建Socket套接字;
(2)發送/接受數據;
(3)關閉套接字。
服務器端基於UDP接收數據並輸出來自客戶端的ip和端口以及發來的數據
# 服務器端接收數據,並在控制檯輸出客戶端的地址和發來的數據
"""
TCP是建立可靠連接,並且通信雙方都可以使用流的形式發送數據,相對於TCP,UDP則是面向無連接的協議。
使用UDP協議時,不需要建立連接,只需要知道對方的IP地址和端口號就可以直接發送數據包,但是能不能到達不能保證
它雖然傳輸數據不可靠,但是他的優點相比於TCP來講是速度快。
"""
import socket
def main():
# socket.SOCK_DGRAM指定是UDP類型
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 獲取本機ip
ip = socket.gethostbyname(socket.gethostname())
# 綁定端口
s.bind((ip,8088))
# 服務器端接收數據並輸出
data,addr=s.recvfrom(1024)
print('Receive data from %s:%s' % addr)
print(data.decode('utf-8'))
s.close()
if __name__ == '__main__':
main()
客戶端以基於UDP發送數據給服務器
1. # 客戶端基於UDP向服務器發送數據
2. import socket
3. def main():
4. # socket.SOCK_DGRAM指定是UDP類型
5. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
6. # 獲取本機ip地址
7. ip = socket.gethostbyname(socket.gethostname())
8.
9. try:
10. # 客戶端發送數據
11. s.sendto(b'12354',(ip,8088))
12. except:
13. print('發送失敗')
14. print('發送成功')
15. # 關閉連接
16. s.close()
17. if __name__ == '__main__':
18. main()
最後客戶端控制檯輸出“發送成功”
服務器的控制檯輸出
Receive data from 192.168.1.4:55197 12354