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.微信.网盘.优酷这一类是属于需要安装的桌 ...
随机推荐
- zabbix监控URL
选在相应主机,并添加Web监控 按照方式新建Web场景 注意: 名称统一规则:web_check_相应的域名 应用集:新建一个,名称为“web状态” 更新间隔:改为30s,默认为1m 尝试次数:改为2 ...
- python基础面试常见题
1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途径学习的Python? 通过自学,包括网上查看一些视频,购买一 ...
- JS事件(二)事件对象
html事件处理程序中,变量event中保存着事件对象 <button onclick="alert(ev.type)" id="btn">clic ...
- pageObject+selenium
新发现的设计模式,很好用. 参考:https://www.cnblogs.com/xiaofeifei-wang/p/6733753.html
- jmeter-录制, 编辑脚本,性能测试全过程review
录制脚本 jmeter下载安装略过不谈,上步骤: 1.在测试计划新建-threads-线程组 2.在工作台新建-非测试原件-http代理服务器,设置端口和包含网址 不包含网址 3.在手机/浏览器,设置 ...
- Traffic Management Gym - 101875G
题意: 有n辆车,在一条直线上运动,给定位置和速度.如果后车追上前车,则后车不会超车,而已变成前车的速度前进,问最后一次上述车速变化发生在何时. 思路: 假设有一下车辆,数字代表移动速度,具体位置未知 ...
- linux 下配置svn
1.以前配置好的,没做笔记,忘记了.现在重新回忆 查找svn目录:find / -name svn 找到/projects/svn cd /projects/svn 看里面的配置: 查看配置 [roo ...
- SSH框架学习环境配置
1. java环境 安装 安装jdk7,根据自己的操作系统选择32位或64位安装. 配置 安装后需要配置环境变量,如下所示: 配置classpath,如下: 并在path中添加java6安装 ...
- Linux学习杂谈
Linux学习相关的... --------- 1.Linux是免费的2.Linux是安全稳定的3.linux是开源的,却世界的工程师都在维护系统--------------------熟悉脚本开发语 ...
- xlrd(excel导入mysql数据库)
一.xlrd模块: python 对 excel 文件进行读操作 1.下载xlrd 并安装 http://pypi.python.org/pypi/xlrd wget https://pypi.pyt ...