Python網路程式設計

2021-08-27 02:56:05 字數 3243 閱讀 3390

網路程式設計分為。tcp和udp,tcp為可靠連線,udp為不可靠連線。僅用**來展示。

import socket

import threading

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

#元組第乙個元素為客戶端要連線的伺服器的ip位址,第二個引數為伺服器的埠號

client.connect(("10.0.122.158", 8080))

# 建立接收執行緒

def run1(c):

while true:

data = c.recv(1024).decode("utf-8")

print("伺服器說:" + data)

th1 = threading.thread(target=run1, args=(client,))

th1.start()

def run2(c):

while true:

#   456#你真壞

data = input("請輸入要傳送給伺服器的訊息:")

data = "talk#" + data

c.send(data.encode("utf-8"))

th2 = threading.thread(target=run2, args=(client,))

th2.start()

client.send("register#123#sunck".encode("utf-8"))

th1.join()

th2.join()

import socket

import threading

from person import person

usersdict = {}

# 1、建立socket

# af_inet:表示使用ipv4

# sock_stream:表示tcp協議

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

#2、繫結

# 引數為乙個元組,元組第乙個元素為本機ip,第二元素為埠號,使用8000以上的值,最大使用到65535

server.bind(("10.0.122.158", 8080))

#3、監聽,設定最多連線數

server.listen(50)

def run(clientsocket, clientaddr):

while true:

#   register#123#sunck

#   talk#456#sunck nice

data = clientsocket.recv(1024).decode("utf-8")

#解析資料

arr = data.split("#")

if arr[0] == "register":

per = person(clientsocket, arr[1], arr[2])

usersdict[arr[1]] = per

elif arr[0] == "talk":

#找到當前使用者的使用者名稱

name = none

for account, per in usersdict.items():

if per.clientsocket is clientsocket:

name = per.name

break

#找到好友

per = usersdict.get(arr[1])

friendscoket = per.clientsocket

# 給好友傳送訊息

#  sunck說:你真帥

friendscoket.send((name+":"+arr[2]).encode("utf-8"))

#4、等待客戶端的鏈結

while true:

print("等待鏈結……")

#客戶端連線成功返回客戶端的socket和客戶端的ip位址

clientsocket, clientaddr = server.accept()

print(clientaddr, "客戶鏈結成功")

#建立執行緒互動

th = threading.thread(target=run, args=(clientsocket, clientaddr))

th.start()

class person(object):

def __init__(self, clientsocket, account, name):

self.clientsocket = clientsocket

self.account = account

self.name = name

import socket

client = socket.socket(socket.af_inet, socket.sock_dgram)

while true:

data = input("輸入要傳送的資訊:")

client.sendto(data.encode("utf-8"), ("10.0.122.158", 8080))

以下方式不建議使用

client = socket.socket(socket.af_inet, socket.sock_dgram)

client.connect(("10.0.122.158", 8081))

while true:

data = input("輸入要傳送的資訊:")

client.send(data.encode("utf-8"))

# tcp是建立可靠連線,並且通訊雙方都可以以流的形式傳送資料。相對tcp,udp則是面向無連線的協議

# 使用udp協議時,不需要建立連線,只需要知道對方的ip位址和埠號,就可以直接傳送資料報,但是能不能到達就不知道了

# 雖然udp傳輸資料不可靠,但是它的優點是和tcp相比較,速度快,對於不要求可靠到達的資料,可以使用udp,廣播型別的軟體經常使用

import socket

server = socket.socket(socket.af_inet, socket.sock_dgram)

server.bind(("10.0.122.158", 8081))

while true:

data, addr = server.recvfrom(1024)

print("來自", addr, "的訊息:", data.decode("utf-8"))

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...

python 網路程式設計

今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...

python網路程式設計

網路通訊是計算機之間的程序之間的通訊。tcp程式設計 tcp連線建立是雙向通道,客戶端與服務端都可以給對方傳送資料。建立tcp連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。建立乙個tcp的socket連線 用socket family,type 建立套接字獲得socket物件。family...