0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

socket 編程基礎(chǔ)入門(mén)

科技綠洲 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2024-11-12 14:03 ? 次閱讀

Socket 編程基礎(chǔ)入門(mén)

在計(jì)算機(jī)網(wǎng)絡(luò)中,Socket 是一個(gè)抽象層,它將網(wǎng)絡(luò)通信的細(xì)節(jié)隱藏起來(lái),為開(kāi)發(fā)者提供了一個(gè)簡(jiǎn)單的接口來(lái)發(fā)送和接收數(shù)據(jù)。Socket 編程是網(wǎng)絡(luò)編程的基礎(chǔ),它允許程序之間進(jìn)行通信。本文將帶你入門(mén) Socket 編程,幫助你理解基本概念和步驟。

1. Socket 的基本概念

Socket 是一個(gè)通信端點(diǎn),它允許程序發(fā)送和接收數(shù)據(jù)。在 TCP/IP 協(xié)議族中,有兩種主要類(lèi)型的 Socket:流式 Socket(Stream Sockets,基于 TCP)和數(shù)據(jù)報(bào) Socket(Datagram Sockets,基于 UDP)。

  • 流式 Socket(TCP) :提供面向連接、可靠的字節(jié)流服務(wù)。數(shù)據(jù)傳輸是有序的,并且保證數(shù)據(jù)的完整性。
  • 數(shù)據(jù)報(bào) Socket(UDP) :提供無(wú)連接服務(wù),數(shù)據(jù)包可能丟失或亂序到達(dá),但不保證數(shù)據(jù)的完整性。

2. Socket 編程步驟

Socket 編程通常包括以下幾個(gè)步驟:

  1. 創(chuàng)建 Socket :在客戶端和服務(wù)器端都需要?jiǎng)?chuàng)建一個(gè) Socket 對(duì)象。
  2. 綁定地址 :服務(wù)器端需要將 Socket 綁定到一個(gè) IP 地址和端口號(hào)上。
  3. 監(jiān)聽(tīng)連接 :服務(wù)器端需要監(jiān)聽(tīng)客戶端的連接請(qǐng)求。
  4. 接受連接 :服務(wù)器端接受客戶端的連接請(qǐng)求,建立連接。
  5. 數(shù)據(jù)傳輸 :客戶端和服務(wù)器端可以開(kāi)始發(fā)送和接收數(shù)據(jù)。
  6. 關(guān)閉連接 :數(shù)據(jù)傳輸完成后,需要關(guān)閉 Socket 連接。

3. TCP Socket 編程示例

下面是一個(gè)簡(jiǎn)單的 TCP Socket 編程示例,包括客戶端和服務(wù)器端代碼。

服務(wù)器端代碼(Python):
import socket

# 創(chuàng)建 socket 對(duì)象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 獲取本地主機(jī)名
host = socket.gethostname()
port = 9999

# 綁定端口號(hào)
server_socket.bind((host, port))

# 設(shè)置最大連接數(shù),超過(guò)后排隊(duì)
server_socket.listen(5)

while True:
# 建立客戶端連接
client_socket, addr = server_socket.accept()

print(f"連接地址: {str(addr)}")

while True:
# 接收小于 1024 字節(jié)的數(shù)據(jù)
data = client_socket.recv(1024)
if not data:
# 如果沒(méi)有數(shù)據(jù),跳出循環(huán)
break
# 發(fā)送數(shù)據(jù)
client_socket.send(data)

# 關(guān)閉連接
client_socket.close()
客戶端代碼(Python):
import socket

# 創(chuàng)建 socket 對(duì)象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 獲取本地主機(jī)名
host = socket.gethostname()
port = 9999

# 連接服務(wù),指定主機(jī)和端口
client_socket.connect((host, port))

try:
# 發(fā)送數(shù)據(jù)
message = 'This is the message.'
client_socket.send(message.encode('utf-8'))

# 接收小于 1024 字節(jié)的數(shù)據(jù)
data = client_socket.recv(1024)
print(f"Received: {data.decode('utf-8')}")

finally:
# 關(guān)閉連接
client_socket.close()

4. UDP Socket 編程示例

UDP Socket 編程與 TCP 類(lèi)似,但不需要建立連接。

服務(wù)器端代碼(Python):
import socket

# 創(chuàng)建 socket 對(duì)象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 獲取本地主機(jī)名
host = socket.gethostname()
port = 9998

# 綁定端口號(hào)
server_socket.bind((host, port))

while True:
# 接收數(shù)據(jù)和客戶端地址
data, addr = server_socket.recvfrom(1024)
print(f"Received message: {data} from {addr}")

# 發(fā)送數(shù)據(jù)
server_socket.sendto(data, addr)
客戶端代碼(Python):
import socket

# 創(chuàng)建 socket 對(duì)象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 獲取本地主機(jī)名
host = socket.gethostname()
port = 9998

# 發(fā)送數(shù)據(jù)
message = 'This is a UDP message.'
client_socket.sendto(message.encode('utf-8'), (host, port))

# 接收數(shù)據(jù)
data, server = client_socket.recvfrom(1024)
print(f"Received: {data.decode('utf-8')} from {server}")

# 關(guān)閉連接
client_socket.close()

5. 總結(jié)

Socket 編程是網(wǎng)絡(luò)編程的基礎(chǔ),通過(guò)本文的介紹,你應(yīng)該對(duì) Socket 的基本概念和編程步驟有了初步的了解。無(wú)論是 TCP 還是 UDP,Socket 都提供了一個(gè)簡(jiǎn)單的接口來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)通信。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8873

    瀏覽量

    152922
  • Socket
    +關(guān)注

    關(guān)注

    0

    文章

    212

    瀏覽量

    35391
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3671

    瀏覽量

    94667
  • 網(wǎng)絡(luò)通信
    +關(guān)注

    關(guān)注

    4

    文章

    823

    瀏覽量

    30627
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux+Socket編程

    本內(nèi)容詳細(xì)講述了Linux+Socket編程技巧指南,適合所有學(xué)習(xí)編程的廣大用戶使用
    發(fā)表于 06-10 11:19 ?0次下載
    Linux+<b class='flag-5'>Socket</b><b class='flag-5'>編程</b>

    C語(yǔ)言SOCKET編程指南

    這個(gè)文檔是一個(gè)指南,而不是參考書(shū)。如果你剛開(kāi)始socket 編程并想找一本入門(mén)書(shū),那么你是我的讀者。但這不是一本完全的socket 編程書(shū)。
    發(fā)表于 12-09 14:58 ?0次下載

    SOCKEt編程介紹

    這個(gè)文檔是一個(gè)指南,而不是參考書(shū)。如果你剛開(kāi)始 socket 編程并想找一本入門(mén)書(shū),那么你是我的讀者。但這不是一本完全的 socket 編程
    發(fā)表于 03-02 15:36 ?4次下載

    linux-網(wǎng)絡(luò)編程-socket編程

    linux開(kāi)發(fā)編程教程資料——linux-網(wǎng)絡(luò)編程-socket編程,感興趣的小伙伴們可以看一看。
    發(fā)表于 08-23 16:23 ?0次下載

    MFC-socket編程

    計(jì)算機(jī)上的上位機(jī)制作工具語(yǔ)言之MFC-socket編程
    發(fā)表于 09-01 14:55 ?0次下載

    Socket網(wǎng)絡(luò)編程

    計(jì)算機(jī)學(xué)習(xí)相關(guān)知識(shí)學(xué)習(xí)教程之Socket網(wǎng)絡(luò)編程
    發(fā)表于 09-01 15:01 ?0次下載

    Windows-Socket-API編程

    Windows-Socket-API編程教程,感興趣的可以看看。
    發(fā)表于 09-01 15:27 ?0次下載

    socket是什么意思_socket編程是什么意思_socket詳解

    編程語(yǔ)言的角度,socket是一個(gè)無(wú)符號(hào)整型變量,用來(lái)標(biāo)識(shí)一個(gè)通信進(jìn)程。兩個(gè)進(jìn)程通信,總要知道這幾個(gè)信息:雙方的ip地址和端口號(hào),通信所采用的協(xié)議棧。socket就是和這些東西綁定的,實(shí)現(xiàn)s
    發(fā)表于 12-28 17:21 ?2.4w次閱讀

    基于Socket的java通信編程詳解

    Java最初是作為網(wǎng)絡(luò)編程語(yǔ)言出現(xiàn)的,其對(duì)網(wǎng)絡(luò)提供了高度的支持,使得客戶端和服務(wù)器的溝通變成了現(xiàn)實(shí),而在網(wǎng)絡(luò)編程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket
    發(fā)表于 12-28 17:37 ?2912次閱讀
    基于<b class='flag-5'>Socket</b>的java通信<b class='flag-5'>編程</b>詳解

    SOCKET入門(mén)最簡(jiǎn)單的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是SOCKET入門(mén)最簡(jiǎn)單的程序免費(fèi)下載。
    發(fā)表于 07-17 17:39 ?0次下載
    <b class='flag-5'>SOCKET</b><b class='flag-5'>入門(mén)</b>最簡(jiǎn)單的程序免費(fèi)下載

    Socket 網(wǎng)絡(luò)編程框架介紹

    Socket 網(wǎng)絡(luò)編程框架 Socket(套接字)是一個(gè)網(wǎng)絡(luò)編程概念,描述了一個(gè)通信端點(diǎn)(Endpoint),用于建立網(wǎng)絡(luò)連接(Connection)并傳輸數(shù)據(jù)。 Linux Kern
    的頭像 發(fā)表于 11-09 14:19 ?1315次閱讀
    <b class='flag-5'>Socket</b> 網(wǎng)絡(luò)<b class='flag-5'>編程</b>框架介紹

    如何理解socket編程接口

    Socket編程接口是一種網(wǎng)絡(luò)編程的基本概念,它提供了一種在不同計(jì)算機(jī)之間進(jìn)行通信的方法。 Socket編程接口的基本概念 1.1
    的頭像 發(fā)表于 08-16 10:48 ?722次閱讀

    什么是socket編程 socket與tcp/ip協(xié)議的關(guān)系

    什么是Socket編程 Socket編程是一種網(wǎng)絡(luò)編程技術(shù),它允許程序之間進(jìn)行通信。在計(jì)算機(jī)科學(xué)中,so
    的頭像 發(fā)表于 11-01 16:01 ?878次閱讀

    socket編程中的阻塞與非阻塞

    在網(wǎng)絡(luò)編程中, socket 是一個(gè)非常重要的概念,它提供了一個(gè)抽象層,使得開(kāi)發(fā)者可以不必關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié)。 socket 編程中的阻塞與非阻塞模式是兩種不同的操作方式,它們對(duì)程
    的頭像 發(fā)表于 11-01 16:13 ?516次閱讀

    C語(yǔ)言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語(yǔ)言中,socket編程是網(wǎng)絡(luò)
    的頭像 發(fā)表于 11-01 16:51 ?853次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品