5-4日 socket套接字
1,socket定义
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
2,基于tcp协议的socket
tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端。
server端
import socket
sk = socket.socket()#创建服务端套接字 sk.bind(('127.0.0.1',9090))#把地址绑定到套接字
sk.listen()#监听链接 conn,addr = sk.accept()#接受客户端链接
print(addr)#打印客户端地址
conn.send('你好'.encode('utf-8'))#向客户端发送信息
ret = conn.recv(1024)#接受客户端信息
print(ret.decode('utf-8'))#打印客户端信息 conn.close()#关闭客户端套接字
sk.close()#关闭服务器套接字(可选)
client端
import socket sk = socket.socket()#创建客户端套接字
sk.connect(('127.0.0.1',9090))# 尝试连接服务器
ret = sk.recv(1024)#接受服务端信息
print(ret.decode('utf-8'))#打印服务端信息
sk.send('你也好'.encode('utf-8'))# 对话(发送/接收) sk.close()# 关闭客户套接字
3,基于UDP协议的socket
udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
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 socket sk= 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()
时间服务器
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 socket sk = 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参数的详解
socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)
创建socket对象的参数说明:
| family | 地址系列应为AF_INET(默认值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。 (AF_UNIX 域实际上是使用本地 socket 文件来通信) |
| type |
套接字类型应为SOCK_STREAM(默认值),SOCK_DGRAM,SOCK_RAW或其他SOCK_常量之一。 SOCK_STREAM 是基于TCP的,有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料传送。 SOCK_DGRAM 是基于UDP的,无保障的面向消息的socket,多用于在网络上发广播信息。 |
| proto | 协议号通常为零,可以省略,或者在地址族为AF_CAN的情况下,协议应为CAN_RAW或CAN_BCM之一。 |
| fileno |
如果指定了fileno,则其他参数将被忽略,导致带有指定文件描述符的套接字返回。 与socket.fromfd()不同,fileno将返回相同的套接字,而不是重复的。 这可能有助于使用socket.close()关闭一个独立的插座。 |
5-4日 socket套接字的更多相关文章
- java 25 - 3 网络编程之 Socket套接字
Socket Socket套接字: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. Socket原理机制: 通信的两端都有Socket. 网络通信其实就是Socket ...
- 进程、线程、socket套接字-资源大小 & 切换代价
另,进程 & 线程的很多知识可以看这里:http://www.cnblogs.com/charlesblc/p/6135666.html 今天查了一下进程和线程的资源占用. 比如问:栈和堆的大 ...
- linux网络环境下socket套接字编程(UDP文件传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- linux网络编程-(socket套接字编程UDP传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- socket套接字TCP API
socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ...
- 进程间通信系列 之 socket套接字实例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- 进程间通信系列 之 socket套接字及其实例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- 一、网络编程-UDP传输协议及socket套接字使用
知识点基本介绍:1.网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP 2.ip:ip就是标记网络中中的一台电脑 ...
- 网络编程初识和socket套接字
网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ...
随机推荐
- A1138. Postorder Traversal
Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and in ...
- Python基础-元组、列表、字典
元组tuple 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组.例:(1,2,3)("a","b","c&q ...
- Linux 系统设置sh文件开机自启动
工作中有一个linux下的服务需要启动,但是机器总是断电,导致需要反复启动,找了一下开机自启动的方法,解决了这个问题.Linux设置开机自启动非常简单,只要找到rc.local文件,将你需要自启动的文 ...
- Oracle 常用的十大 DDL 对象
table:(表) 创建表 create table test3 (tid number,tname varchar2(),hiredate date default sysdate); create ...
- pageObject+selenium
新发现的设计模式,很好用. 参考:https://www.cnblogs.com/xiaofeifei-wang/p/6733753.html
- (find) nyoj5-Binary String Matching
5-Binary String Matching 内存限制:64MB 时间限制:3000ms 特判: No通过数:232 提交数:458 难度:3 题目描述: Given two strings A ...
- bzoj3991 LCA + set
https://www.lydsy.com/JudgeOnline/problem.php?id=3991 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有 ...
- linux下安装SlickEdit
title: linux下安装SlickEdit tags: 软件 date: 2018-10-08 21:32:12 --- linux下安装SlickEdit 下载安装包和补丁文件 补丁文件 官方 ...
- SQL语法基础之UPDATE语句
SQL语法基础之UPDATE语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看UPDATE语句的帮助信息 1>.查看UPDATE的帮助信息 mysql> ? ...
- maven构建myeclipse 工程
前提:安装maven完成后 mvn -version查看版本 一,新建WEB 工程 mvn archetype:generate -DgroupId={project-packaging} -Dar ...