pygame網絡遊戲_5_1:網絡編程_HelloWorld

快兩個月沒更新啦。這段時間因爲換工作,一直很忙沒時間寫文章。現在工作穩定啦,繼續繼續~

1.什麼是網絡編程

在之前的文章中,我們都是寫的單機程序。從本章開始,我們將正式進入到網絡編程部分啦。在我們的教程裏,並不會去深入講解網絡編程,因爲這個水實在太深了。我們這隻講最簡單的,能實現我們的功能即可。

想必大家都聽過客戶端和服務端這兩個詞吧。像我們電腦裏裝的軟件幾乎都是客戶端,比如QQ、微信、英雄聯盟等等。而服務端就是爲客戶端提供數據和服務的。

好了,廢話不多說,先來寫一個helloworld,直接在代碼裏感受吧。

 

2.服務端

新建一個server.py:

import socket

# 創建socket對象,使用TCP協議
server = socket.socket()

# 綁定本機ip和端口號
server.bind(('127.0.0.1', 8712))

# 開始監聽
server.listen(5)

# 接收客戶端(阻塞線程),client也是socket對象
client, address = server.accept()

print('有客戶端連接啦!', address)

# 發送消息給客戶端
client.send(b'I am server.HelloWorld')

# 接收客戶端返回的消息(阻塞線程)
data = client.recv(1024)  # 返回的數據類型是bytes

# 由於是字節數組類型,所以需要解碼成字符串
str_data = data.decode()

print(str_data)

client.close()

server.close()

第4行,創建一個socket對象,socket.socket()沒用任何參數,默認是使用TCP協議的。什麼是socket呢,百度百科裏的解釋比較詳細,我就簡單說一下,socket就是一套對tcp/ip協議族的封裝,就是一套api。不理解沒關係,並不影響我們目前的開發。

第13行,server.accept()是會阻塞線程的,通俗點講,就是代碼會卡在這一句,不繼續往下執行。當有客戶端連進來的時候纔會繼續執行下面的代碼。這個語句會返回一個socket對象和客戶端的地址。

第18行,給客戶端發送消息,send的參數必須是bytes類型,所以我在字符串前面加了個b,也可以這樣寫:client.send('I am server.HelloWorld'.encode())

第21行,接收客戶端消息,這裏也會阻塞線程,如果客戶端一直沒回復消息的話,代碼會一直卡在這裏,不會繼續向下執行。1024是一次性能接收的數據大小,最多接收1024字節,也就是1kb,如果客戶端一次發過來的數據大於1kb的話,那得多次調用recv能完整接收客戶端數據。

第24行,由於recv的返回值是bytes類型,咱們得用decode解碼,轉換成字符串。

 

3.客戶端

新建一個client.py:

import socket

# 創建socket對象
client = socket.socket()

# 連接服務端
client.connect(('127.0.0.1', 8712))

# 接收服務端發送過來的數據
data = client.recv(1024)

str_data = data.decode()

print(str_data)

client.send(b'I am client.Hello!')

client.close()

客戶端就相對簡單啦

 

4.運行效果

先運行server.py,再運行client.py

服務端截圖:

客戶端截圖:

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