socket編程(套接字):指的是通過代碼來創(chuàng)建實現(xiàn)通信的兩個端(服務器和客戶端)旺芽。
socket一般可以基于TCP和UDP實現(xiàn)客戶端和服務器之間的可靠和不可靠傳輸革屠。
python中的內(nèi)置模塊socket可以支持socket編程。
一些比較重要的基礎知識:
osi七層模型 與 TCP/IP五層模型
https://www.cnblogs.com/qishui/p/5428938.html
TCP協(xié)議的三次握手與四次揮手
https://www.cnblogs.com/Andya/p/7272462.html
網(wǎng)絡劃分
https://blog.csdn.net/lzyzuixin/article/details/6361620
服務器端
import socket
# 通過socket實現(xiàn)服務器端
if __name__ == '__main__':
# 1腿短、創(chuàng)建服務器套接字對象
"""
family:確定服務類型
AF_INET --> ipV4
AF_INET6 --> ipV6
type:確定傳輸協(xié)議類型
SOCK_STREAM --> TCP協(xié)議
SOCK_DGRAM --> UDP協(xié)議
"""
# server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
server = socket.socket()
# 2捞慌、綁定ip端口
"""
地址格式:(ip地址字符串昌妹,端口號)
端口號是用來區(qū)分一個計算機中不同的服務,范圍是0-65535
其中0-1024是‘著名端口’用來綁定一些特殊服務的稀拐,一般不使用
同一時間火邓,一個端口只能綁定一個服務
"""
server.bind(('10.7.181.56', 8079))
# 3、監(jiān)聽
"""
參數(shù):用來限制一次性能夠接受的客戶端請求的數(shù)量
"""
server.listen(50)
print('開始監(jiān)聽')
# 保證服務器處于一直啟動的狀態(tài)
while True:
# 4德撬、接受客戶端的請求
"""
accept()會阻塞線程铲咨,到客戶端給這個服務器發(fā)送請求,才會開始執(zhí)行
"""
client, address = server.accept()
print(address)
while True:
# 5蜓洪、給客戶端發(fā)送信息
"""
send(數(shù)據(jù)):數(shù)據(jù)類型必須是二進制數(shù)據(jù)(bytes)類型
字符串轉(zhuǎn)二進制:
byte
"""
str0 = input()
client.send(str0.encode(encoding='utf-8'))
# client.send(bytes('你好纤勒!', encoding='utf-8'))
# client.send('我很好!'.encode())
# 接受從客戶端發(fā)來的消息
"""
buffersize:設置緩存大新√础(B)
1024B -> 1K
1024K -> 1M
1024M -> 1G
T摇天、 P粹湃、 E、 Z闸翅、 Y再芋、 BB
二進制(bytes)轉(zhuǎn)換成字符串:
a.str(二進制數(shù)據(jù),encoding='utf-8')
b.二進制數(shù)據(jù).decode(encoding='utf-8')
"""
data = client.recv(10240)
str1 = str(data, encoding='utf-8')
print(str1)
# str2 = data.decode(encoding='utf-8')
# 6坚冀、關閉連接
client.close()
客戶端
# -*- coding: utf-8 -*-
# @Time : 2018/8/7 14:14
# @Author : G.Hope
# @Email : 1638327522@qq.com
# @File : socketClient.py
# @Software: PyCharm
import socket
if __name__ == '__main__':
# 創(chuàng)建套接字對象
client = socket.socket()
# 連接服務器
client.connect(('10.7.181.117', 12345))
while True:
# 接受信息
data = client.recv(10240)
print(data.decode(encoding="utf-8"))
# 發(fā)送消息
str = input('')
client.send(str.encode(encoding='utf-8'))
# 要求一旦連接上济赎,兩個之間可以不斷的聊天(輸入聊天信息)