Python實驗6--網絡編程

題目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
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章