socket程式設計

2021-08-21 06:36:35 字數 1792 閱讀 4853

一,socket的定義

socket是應用層與

tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。

二,socket的執行流程

先從伺服器端說起。伺服器端先初始化

socket,然後與埠繫結(bind),對埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線。在這時如果有個客戶端初始化乙個socket,然後連線伺服器(connect),如果連線成功,這時客戶端與伺服器端的連線就建立了。客戶端傳送資料請求,伺服器端接收請求並處理請求,然後把回應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束

三。socket的應用

服務端

import socket

#1、買手機

phone=socket.socket(socket.af_inet,socket.sock_stream) #tcp稱為流式協議,udp稱為資料報協議sock_dgram

# print(phone)

#2、插入/繫結手機卡

# phone.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)

phone.bind(('127.0.0.1',8080))

#3、開機

phone.listen(5) # 半連線池,限制的是請求數

#4、等待**連線

print('start....')

while true: # 連線迴圈

conn,client_addr=phone.accept() #(三次握手建立的雙向連線,(客戶端的ip,埠))

# print(conn)

print('已經有乙個連線建立成功',client_addr)

#5、通訊:收\發訊息

while true: # 通訊迴圈

try:

print('服務端正在收資料...')

data=conn.recv(1024) #最大接收的位元組數,沒有資料會在原地一直等待收,

即傳送者傳送的資料量必須》0bytes

# print('===>')

if len(data) == 0:break #在客戶端單方面斷開連線,服務端才會出現收空資料的情況

print('來自客戶端的資料',data)

conn.send(data.upper())

except connectionreseterror:

break

#6、掛掉**連線

conn.close()

#7、關機

phone.close()

客戶端import socket

#1、買手機

phone=socket.socket(socket.af_inet,socket.sock_stream)

# print(phone)

#2、撥**

phone.connect(('127.0.0.1',8080)) # 指定服務端ip和埠

#3、通訊:發\收訊息

while true: # 通訊迴圈

msg=input('>>: ').strip() #msg=''

if len(msg) == 0:continue

phone.send(msg.encode('utf-8'))

# print('has send----->')

data=phone.recv(1024)

# print('has recv----->')

print(data)

#4、關閉

phone.close()

socket程式設計

一直以為serversocket accept之後客戶端才能發資訊,實驗後得出如下結論 1 serversocket沒有accept時,client是可以傳送資訊到server端的。2 serversocket accept之後,正在處理訊息時,client也是可以傳送資訊到server端。如果se...

Socket程式設計

對tcp ip udp socket程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission cont...

socket程式設計

建立socket 建立乙個 socket,它可用於在基於 tcp ip 的網路 如 internet 上通訊。socket s new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp 若要使用 udp 而不是 ...