日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5-4日 socket套接字

發(fā)布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5-4日 socket套接字 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1,socket定義

Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設(shè)計模式中,Socket其實就是一個門面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。

2,基于tcp協(xié)議的socket

tcp是基于鏈接的,必須先啟動服務(wù)端,然后再啟動客戶端去鏈接服務(wù)端。

server端

import socket sk = socket.socket()#創(chuàng)建服務(wù)端套接字sk.bind(('127.0.0.1',9090))#把地址綁定到套接字 sk.listen()#監(jiān)聽鏈接conn,addr = sk.accept()#接受客戶端鏈接 print(addr)#打印客戶端地址 conn.send('你好'.encode('utf-8'))#向客戶端發(fā)送信息 ret = conn.recv(1024)#接受客戶端信息 print(ret.decode('utf-8'))#打印客戶端信息conn.close()#關(guān)閉客戶端套接字 sk.close()#關(guān)閉服務(wù)器套接字(可選)

client端

import socketsk = socket.socket()#創(chuàng)建客戶端套接字 sk.connect(('127.0.0.1',9090))# 嘗試連接服務(wù)器 ret = sk.recv(1024)#接受服務(wù)端信息 print(ret.decode('utf-8'))#打印服務(wù)端信息 sk.send('你也好'.encode('utf-8'))# 對話(發(fā)送/接收)sk.close()# 關(guān)閉客戶套接字

3,基于UDP協(xié)議的socket

udp是無鏈接的,啟動服務(wù)之后可以直接接受消息不需要提前建立鏈接

server端

import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9090)) while True:msg,client_addr = sk.recvfrom(1024)print(msg.decode('utf-8'))inp = input('>>>')sk.sendto(inp.encode('utf-8'),client_addr)sk.close()

client端

import socketsk= socket.socket(type=socket.SOCK_DGRAM) while True:inp = input('>>>')sk.sendto(inp.encode('utf-8'),('127.0.0.1',9090))msg,addr = sk.recvfrom(1024)print(msg.decode('utf-8'))sk.close()

?qq輕聊版

server端

import socket lst = {'egon':'\031[1;31m','yuan':'031[1;31m'} sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9090)) while True:msg,client_addr = sk.recvfrom(1024)name,mesg = msg.decode('utf-8').split(':')color = lst.get(name.strip(),'')print('%s%s\033[0m'%(color,msg.decode('utf-8')))inp = input('>>>')sk.sendto(inp.encode('utf-8'),client_addr) sk.close()

client端

import socket sk = socket.socket(type=socket.SOCK_DGRAM)name = input('name') while True:inp = input('>>>')sk.sendto(('%s:%s'%(name,inp)).encode('utf-8'),('127.0.0.1',9090))msg,addr = sk.recvfrom(1024)print(msg.decode('utf-8')) sk.close()

時間服務(wù)器

server端

import time import socket sk = socket.socket(type = socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9090)) while True:msg,addr = sk.recvfrom(1024)sk.sendto(time.strftime(msg.decode('utf-8')).encode('utf-8'),addr)sk.close()

client端

import time import socketsk = socket.socket(type=socket.SOCK_DGRAM) while True:sk.sendto('%Y/%m/%d %H:%M:%S'.encode('utf-8'),('127.0.0.1',9090))ret,addr = sk.recvfrom(1024)print(ret.decode('utf-8'))time.sleep(2)sk.close()

?

socket參數(shù)的詳解

socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 創(chuàng)建socket對象的參數(shù)說明:
family 地址系列應(yīng)為AF_INET(默認值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。
(AF_UNIX 域?qū)嶋H上是使用本地 socket 文件來通信)
type 套接字類型應(yīng)為SOCK_STREAM(默認值),SOCK_DGRAM,SOCK_RAW或其他SOCK_常量之一。
SOCK_STREAM 是基于TCP的,有保障的(即能保證數(shù)據(jù)正確傳送到對方)面向連接的SOCKET,多用于資料傳送。
SOCK_DGRAM 是基于UDP的,無保障的面向消息的socket,多用于在網(wǎng)絡(luò)上發(fā)廣播信息。
proto 協(xié)議號通常為零,可以省略,或者在地址族為AF_CAN的情況下,協(xié)議應(yīng)為CAN_RAW或CAN_BCM之一。
fileno 如果指定了fileno,則其他參數(shù)將被忽略,導(dǎo)致帶有指定文件描述符的套接字返回。
與socket.fromfd()不同,fileno將返回相同的套接字,而不是重復(fù)的。
這可能有助于使用socket.close()關(guān)閉一個獨立的插座。

轉(zhuǎn)載于:https://www.cnblogs.com/yzxing/p/8992043.html

總結(jié)

以上是生活随笔為你收集整理的5-4日 socket套接字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。