"""author = 陳俊龍"""
=============socket server=============
import socket
1.什么是socket
socket又叫套接字歹茶,指的是實現(xiàn)網(wǎng)絡通信的兩端
2.服務器套接字
1)創(chuàng)建套接字對象(買電話機)(服務器端)
socket(self, family=AF_INET, type=SOCK_STREAM)
說明:
family -
設置ip類型神得,AF_INET - ipv4
type -
設置傳輸類型:SOCK_STREAM - TCP傳輸協(xié)議, SOCK_DGRAM - UDP傳輸協(xié)議
server = socket.socket()
2)綁定ip和端口(插電話線)
bind(adderss) - 綁定地址
說明:
adderss -
元組,(ip地址爆侣,端口)
ip地址 -
通過ip地址可以確認互聯(lián)網(wǎng)中的唯一一臺計算機
運行服務器程序的計算機的ip地址 112.193.57.163
端口 -
端口是用來區(qū)分同一臺計算機中的不同服務(數(shù)字)
范圍是065535,其中01024是著名端口(不能隨便用)
server.bind(('10.7.160.62', 8888))
3)設置最大監(jiān)聽數(shù): - 決定最多有多少客戶端同時連接服務器(找人來等電話)
server.listen(10)
4)讓服務器一直保持啟動狀態(tài)
5) 接收請求(相當于接電話)恨课,返回建立的連接和客戶端地址
注意:當代碼執(zhí)行到這里呢灶,程序會停下來直到有客戶端給當前服務器發(fā)送請求為止
while True:
print('開始監(jiān)聽...........')
connection, addr = server.accept()
print('++++++++++++++++++')
print(addr)
6)接收客戶端發(fā)送的消息
對應所建立的連接.recv(一次性能接收的最大值) - 返回值是接收到的數(shù)據(jù),數(shù)據(jù)類型是二進制(bytes)
補充 :
二進制數(shù)據(jù)和字符串的相互轉換
二進制轉字符串:
str(二進制數(shù)據(jù)见芹,encoding='utf8')
二進制數(shù)據(jù).decode(encoding='utf8')
re_data = connection.recv(1024)
re_message = str(re_data, encoding='utf-8')
# re_message = re_data.decode(encoding='utf8')
print(re_message)
7)發(fā)送消息(說話)
send(發(fā)送數(shù)據(jù)) - 發(fā)送數(shù)據(jù)的類型是二進制
補充:
字符串轉二進制
bytes(字符串, encoding='utf8')
字符串.encode()
send_data = bytes('你好嗎剂娄?', encoding='utf-8')
# send_data = '你好嗎?'.encode()
connection.send(send_data)
8)斷開連接(掛電話)
connection.close()
==============sockt client===============
import socket
1.創(chuàng)建套接字對象(客戶端)
client = socket.socket()
2.連接服務器
connect((服務器ip,服務器端口)) - 元組
client.connect(('10.7.160.73', 8000))
3.發(fā)送消息
client.send('我是陳俊龍玄呛!'.encode())
4.接收消息
re_data = client.recv(1024)
print(re_data.decode(encoding='utf8'))
5.關閉連接
client.close()
===============持續(xù)通訊服務端===========
import socket
創(chuàng)建套接字對象
server = socket.socket()
綁定地址
server.bind(('10.7.160.62', 8888))
開始監(jiān)聽
server.listen(10)
保持服務器一直處在啟動狀態(tài)
while True:
# 接收請求
print('開始監(jiān)聽......')
connection, address = server.accept()
while True:
# 接收消息
re_data = connection.recv(1024)
print(address, re_data.decode(encoding='utf8'))
if re_data.decode(encoding='utf8') == '拜拜':
connection.close()
break
# 發(fā)送消息
message = input('請輸入:')
connection.send(message.encode())
=============持續(xù)通信客戶端=============
import socket
client = socket.socket()
client.connect(('10.7.160.62', 8888))
while True:
message = input('請輸入:')
client.send(message.encode())
if message == '拜拜':
client.close()
break
re_data = client.recv(1024)
print(re_data.decode(encoding='utf8'))
if re_data.decode(encoding='utf8') == '拜拜':
client.close()
break