国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 python socket 實現(xiàn)UDP/TCP網(wǎng)絡通信

這篇具有很好參考價值的文章主要介紹了使用 python socket 實現(xiàn)UDP/TCP網(wǎng)絡通信。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

目錄

1.socket簡介

2.創(chuàng)建socket

2.1創(chuàng)建UDPSocket

2.2創(chuàng)建TCPSocket

3.使用UDPSocket發(fā)送數(shù)據(jù)并接收

4.使用UDPSocket發(fā)送廣播

5.UDPSocket聊天器 (多線程實現(xiàn)消息的收發(fā)功能)

6.使用TCPSocket建立客戶端

7.使用TCPSocket建立服務端


1.socket簡介

? ? ? ?socket(簡稱:套接字),是支持TCP和UDP(網(wǎng)絡傳輸方式)網(wǎng)絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程。

????????它能實現(xiàn)不同主機間的進程間通信,我們網(wǎng)絡上各種各樣的服務大多都是基于socket來完成通信的,例如瀏覽的網(wǎng)頁、qq聊天、收發(fā)email等等。

使用 python socket 實現(xiàn)UDP/TCP網(wǎng)絡通信

2.創(chuàng)建socket

? ? ? ? socket起源于Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,對于文件用打開、讀寫、關(guān)閉模式來操作。socket就是該模式的一個實現(xiàn),socket即是一種特殊的文件,一些socket類就是對其進行的操作(讀寫IO、打開、關(guān)閉)

在Python中使用socket模塊的socket類來完成:

import socket
socket.socket(AddressFamily, Type)

說明:

? ? ? ? 1. 參數(shù):AddressFamily(地址簇)

? ? ? ? socket.AF_INET IPv4? ????????(默認)? ? ? ?

????????socket.AF_INET6 IPv6

? ? ? ? socket.AF_UNIX? ? ? ? ? ? ? ? ? ? 只能夠用于單一的Unix系統(tǒng)進程通信

? ? ? ? 2.參數(shù):Type(類型)

? ? ? ? socket.SOCK_STREAM? ? ? ? 流式socket,for TCP(默認)

? ? ? ? socket.SOCK_DGRAM? ? ? ? ?數(shù)據(jù)報式socket,for UDP

2.1創(chuàng)建UDPSocket

import socket


# 使用IPv4 UDP方式來創(chuàng)建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  # 參數(shù)socket.AF_INET表示使用IPv4,參數(shù)socket.SOCK_DGRAM表示使用UDP

# 省略數(shù)據(jù)傳遞過程

# 關(guān)閉套接字
udp_socket.close()

2.2創(chuàng)建TCPSocket

import socket


# 使用IPv4 TCP方式來創(chuàng)建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # 參數(shù)socket.AF_INET表示使用IPv4,參數(shù)socket.SOCK_STREAM表示使用TCP

# 省略數(shù)據(jù)傳遞過程

# 關(guān)閉套接字
tcp_socket.close()

3.使用UDPSocket發(fā)送數(shù)據(jù)并接收

核心方法:

????????socket.sendto

sendto方法的參數(shù):

? ? ? ? 1.要發(fā)送的二進制數(shù)據(jù)? ? ? ? (使用.encode()方法可以將字符串轉(zhuǎn)為二進制)

? ? ? ? 2.接收者的ip地址和端口號? (元組類型:("127.0.0.1", 8080))

import socket


# 使用IPv4 UDP方式來創(chuàng)建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

#2.綁定一個本地信息
localaddr = ("192.168.68.196",8081)
udp_socket.bind(localaddr)

# 發(fā)送數(shù)據(jù)
udp_socket.sendto("hello".encode(),("192.168.68.196",8080))

# 關(guān)閉套接字
udp_socket.close()

接收數(shù)據(jù)(兩種方式):

? ? ? ? 方式一:通過網(wǎng)絡調(diào)試助手接收(下載地址:NetAssist.exe下載)

使用 python socket 實現(xiàn)UDP/TCP網(wǎng)絡通信

對于接收到的中文是亂碼的問題:

????????可能是由于encode()方法默認使用UTF-8的編碼方式

.encode()

?將其改為gb2312編碼方式:

.encode("gb2312")

如下圖標注部分為修改編碼方式前后的對比:?

使用 python socket 實現(xiàn)UDP/TCP網(wǎng)絡通信

????????方式二:通過python代碼制作一個接收端

import socket

def main():
    #1.創(chuàng)建套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    #2.綁定一個本地信息
    localaddr = ("192.168.68.196",8080)
    udp_socket.bind(localaddr)

    #3.接收數(shù)據(jù)
    while True:
        recv_data = udp_socket.recvfrom(1024) #1024表示每次接收1024字節(jié)
        recv_msg = recv_data[0] #存儲接收到的數(shù)據(jù)
        send_addr = recv_data[1]#存儲發(fā)送方的地址信息

    #4.打印接收到的數(shù)據(jù)
    # print(recv_data)
        print("%s:%s" % (str(send_addr),recv_msg.decode("gb2312")) )

    #5.關(guān)閉套接字
    udp_socket.close()

if __name__ == "__main__":
    main()

4.使用UDPSocket發(fā)送廣播

????????廣播地址(Broadcast Address)是專門用于同時向網(wǎng)絡中所有工作站進行發(fā)送的一個地址。在使用TCP/IP 協(xié)議的網(wǎng)絡中,主機標識段host ID 為全1 的IP 地址為廣播地址,廣播的分組傳送給host ID段所涉及的所有計算機。例如,對于10.1.1.0 (255.0.0.0 )網(wǎng)段,其廣播地址為10.255.255.255 (255 即為二進制的11111111 ),當發(fā)出一個目的地址為10.255.255.255 的分組(封包)時,它將被分發(fā)給該網(wǎng)段上的所有計算機。

import socket


# 使用IPv4 UDP方式來創(chuàng)建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

#2.綁定一個本地信息
localaddr = ("192.168.68.196",8081)
udp_socket.bind(localaddr)

# 設置允許發(fā)送廣播
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)

# 發(fā)送信息
udp_socket.sendto("大家好,我宣布個事兒".encode("gb2312"), ("255.255.255.255", 8080))

# 關(guān)閉套接字
udp_socket.close()

運行結(jié)果:(此時處于同一網(wǎng)段,端口為8080的客戶端應該都能接收到廣播信息)

使用 python socket 實現(xiàn)UDP/TCP網(wǎng)絡通信

5.UDPSocket聊天器 (多線程實現(xiàn)消息的收發(fā)功能)

實現(xiàn)效果:

python UDPSocket聊天器 (多線程實現(xiàn)消息的收發(fā)功能)

代碼:

import socket
from threading import Thread,Lock

def send_msg(udp_socket):
    """發(fā)送信息的函數(shù)"""
    while True:
        input_msg = input("請輸入聊天內(nèi)容:\n")  # 用戶輸入一些信息
        udp_socket.sendto(input_msg.encode("gb2312"), ("192.168.68.196", 8081))

def recv_msg(udp_socket):
    """接收信息的函數(shù)"""
    while True:
        recv_data, tuple_ip_port = udp_socket.recvfrom(1024)
        recv_text = recv_data.decode("gb2312")
        print("接受到[%s]的信息:%s" % (str(tuple_ip_port), recv_text))

def main():
    # 創(chuàng)建套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 綁定端口
    udp_socket.bind(("", 8080))

    # 接收信息
    t1 = Thread(target=recv_msg, args=(udp_socket,))
    t1.start()

    # 發(fā)送信息
    t2 = Thread(target=send_msg, args=(udp_socket,))
    t2.start()

    # # 關(guān)閉套接字
    # udp_socket.close()

if __name__ == '__main__':
    main()

6.使用TCPSocket建立客戶端

import socket

# 創(chuàng)建套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 建立連接
tcp_client_socket.connect(("192.168.68.196", 8081))

# 發(fā)送數(shù)據(jù)
tcp_client_socket.send("你好".encode("gb2312"))

# 接收數(shù)據(jù)
recv_data = tcp_client_socket.recv(1024).decode("gb2312")
print(recv_data)

# 關(guān)閉套接字
tcp_client_socket.close()

7.使用TCPSocket建立服務端

? ? ? ? ·能夠?qū)崿F(xiàn)一個客戶端發(fā)來的多條信息

? ? ? ? ·能夠接收多個客戶端連接

import socket
from threading import Thread


def new_client_connect(new_client_socket, client_ip_port):
    while True:
        # 收發(fā)數(shù)據(jù)
        recv_data = new_client_socket.recv(1024)
        if len(recv_data) != 0:
            recv_text = recv_data.decode("gb2312")
            print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text))
        else:
            print("客戶端斷開連接")
            break

        # # 關(guān)閉連接
        # new_client_socket.close()  # 表示斷開與當前的客戶端的通信

def main():
    # 創(chuàng)建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 綁定端口和ip
    tcp_server_socket.bind(("", 8081))

    # 設置套接字為被動監(jiān)聽模式,不能主動發(fā)送數(shù)據(jù),128為允許接收的最大連接數(shù)
    tcp_server_socket.listen(128)

    while True:
        # 接收客戶端連接
        new_client_socket, client_ip_port = tcp_server_socket.accept()

        t1 = Thread(target=new_client_connect, args=(new_client_socket, client_ip_port))
        t1.start()

        # tcp_server_socket.close()  # 表示不再接受新客戶端的連接,已經(jīng)連接的可以繼續(xù)服務

if __name__ == '__main__':
    main()

?效果:

python TCPSocket服務器 (多線程實現(xiàn)消息的接收功能)文章來源地址http://www.zghlxwxcb.cn/news/detail-409054.html

到了這里,關(guān)于使用 python socket 實現(xiàn)UDP/TCP網(wǎng)絡通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 基于UDP/TCP的網(wǎng)絡通信編程實現(xiàn)

    基于UDP/TCP的網(wǎng)絡通信編程實現(xiàn)

    紅色是心中永不褪色的赤誠 操作系統(tǒng)為網(wǎng)絡編程提供了 Socket api , Socket是基于TCP/IP協(xié)議的網(wǎng)絡通信的基本單元, 基于Socket的網(wǎng)絡程序開發(fā)就是 網(wǎng)絡編程. 由于直接與應用層聯(lián)系的是傳輸層, 所以針對應用層協(xié)議(TCP, UDP), Shocket提供了三種套接字, 分別是 流套接字(使用TCP) , 數(shù)據(jù)報

    2024年02月08日
    瀏覽(33)
  • Java【網(wǎng)絡編程2】使用 TCP 的 Socket API 實現(xiàn)客戶端服務器通信(保姆級教學, 附代碼)

    Java【網(wǎng)絡編程2】使用 TCP 的 Socket API 實現(xiàn)客戶端服務器通信(保姆級教學, 附代碼)

    ??各位讀者好, 我是小陳, 這是我的個人主頁 ??小陳還在持續(xù)努力學習編程, 努力通過博客輸出所學知識 ??如果本篇對你有幫助, 煩請點贊關(guān)注支持一波, 感激不盡 ?? 希望我的專欄能夠幫助到你: JavaSE基礎(chǔ): 基礎(chǔ)語法, 類和對象, 封裝繼承多態(tài), 接口, 綜合小練習圖書管理系統(tǒng)

    2024年02月05日
    瀏覽(33)
  • 【Unity】Socket網(wǎng)絡通信(TCP) - 實現(xiàn)簡單的多人聊天功能

    【Unity】Socket網(wǎng)絡通信(TCP) - 實現(xiàn)簡單的多人聊天功能

    多客戶端連接服務器其原理是在服務端保存客戶端連入后與客戶端通信的socket,由于等待客戶端連接會阻塞主線程,所以結(jié)合多線程就能實現(xiàn)多客戶端連入功能。多人聊天只需要將A客戶端發(fā)來的消息,轉(zhuǎn)發(fā)給除A客戶端外的其他客戶端,即可實現(xiàn)。如果你還不怎么熟悉服務端

    2024年02月03日
    瀏覽(39)
  • 【Java網(wǎng)絡編程】基于UDP-Socket 實現(xiàn)客戶端、服務器通信

    【Java網(wǎng)絡編程】基于UDP-Socket 實現(xiàn)客戶端、服務器通信

    ? 哈嘍,大家好~我是你們的老朋友: 保護小周??? 本期為大家?guī)淼氖蔷W(wǎng)絡編程的 UDP Socket 套接字,基于 UDP協(xié)議的 Socket 實現(xiàn)客戶端服務器通信 ,Socket 套接字可以理解為是,傳輸層給應用層提供的一組 API,如此程序,確定不來看看嘛~~ 本期收錄于博主的專欄 : JavaEE_保

    2024年02月02日
    瀏覽(111)
  • socket概述 python中如何使用TCP/UDP協(xié)議實現(xiàn)通信-教程

    socket概述 python中如何使用TCP/UDP協(xié)議實現(xiàn)通信-教程

    很多編程語言中,都 使用scoket套接字實現(xiàn)網(wǎng)絡通信。 Socket是對TCP/IP協(xié)議的封裝,Socket本身就是一個調(diào)用接口(API),方便程序員用Socket使用TCP/IP協(xié)議簇,實現(xiàn)網(wǎng)絡通信。 不同編程語言,shiyongSocket通信的語法有所區(qū)別,但基本原理類型相似。 它的兩種方式,分別是TCP和UDP協(xié)

    2024年02月13日
    瀏覽(48)
  • 「網(wǎng)絡編程」第二講:網(wǎng)絡編程socket套接字(三)_ 簡單TCP網(wǎng)絡通信程序的實現(xiàn)

    「網(wǎng)絡編程」第二講:網(wǎng)絡編程socket套接字(三)_ 簡單TCP網(wǎng)絡通信程序的實現(xiàn)

    「前言」文章是關(guān)于網(wǎng)絡編程的socket套接字方面的,上一篇是網(wǎng)絡編程socket套接字(二),下面開始講解!? 「歸屬專欄」網(wǎng)絡編程 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) 「楓葉先生有點文青病」「每篇一句」 I?do?not?know?where?to?go,but?I?have?been?on?the?road. 我不知

    2024年02月11日
    瀏覽(29)
  • Linux網(wǎng)絡編程:socket、客戶端服務器端使用socket通信(TCP)

    Linux網(wǎng)絡編程:socket、客戶端服務器端使用socket通信(TCP)

    socket(套接字),用于網(wǎng)絡中不同主機間進程的通信。 socket是一個偽文件,包含讀緩沖區(qū)、寫緩沖區(qū)。 socket必須成對出現(xiàn)。 socket可以建立主機進程間的通信,但需要協(xié)議(IPV4、IPV6等)、port端口、IP地址。 ??????? ?(1)創(chuàng)建流式socket套接字。 ? ? ? ? ? ? ? ? a)此s

    2024年02月11日
    瀏覽(33)
  • Socket網(wǎng)絡編程(TCP/IP)實現(xiàn)服務器/客戶端通信。

    Socket網(wǎng)絡編程(TCP/IP)實現(xiàn)服務器/客戶端通信。

    一.前言 回顧之前進程間通信(無名管道,有名管道,消息隊列,共享內(nèi)存,信號,信號量),都是在同一主機由內(nèi)核來完成的通信。 那不同主機間該怎么通信呢? 可以使用Socket編程來實現(xiàn)。 Socket編程可以通過網(wǎng)絡來實現(xiàn)實現(xiàn)不同主機之間的通訊。 二.Socket編程的網(wǎng)絡模型如

    2024年02月08日
    瀏覽(37)
  • 【網(wǎng)絡】socket——預備知識 | 套接字 | UDP網(wǎng)絡通信

    【網(wǎng)絡】socket——預備知識 | 套接字 | UDP網(wǎng)絡通信

    ??作者:一只大喵咪1201 ??專欄:《網(wǎng)絡》 ??格言: 你只管努力,剩下的交給時間! 在前面本喵對網(wǎng)絡的整體輪廓做了一個大概的介紹,比如分層,協(xié)議等等內(nèi)容,現(xiàn)在我們直接進入socket(套接字)編程,先來感受到網(wǎng)絡編程。 我們知道,在網(wǎng)絡通信中,存在兩套地址,一

    2024年02月13日
    瀏覽(21)
  • unity Sockets通信 使用UDP協(xié)議,設置客戶端電腦網(wǎng)絡配置,使用新線程獲取數(shù)據(jù),解決卡頓問題,

    unity Sockets通信 使用UDP協(xié)議,設置客戶端電腦網(wǎng)絡配置,使用新線程獲取數(shù)據(jù),解決卡頓問題,

    今天調(diào)試和服務器連接,發(fā)現(xiàn)始終獲取不到服務器的數(shù)據(jù), 電腦和服務器都在同一局域網(wǎng),仍然獲取不到, 下面是電腦環(huán)境配置, 第一步: 設置網(wǎng)絡為專用網(wǎng)絡,然后點擊配置防火墻和安全設置,關(guān)閉防火墻 (點擊所連接的wifi的屬性) 第二步:設置出站 入站規(guī)則 點擊高

    2024年02月07日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包