python - socket - connection
前面有了TCP server和TCP client。在这个文章中我们建立tcp连接并且进行数据的发送。
例子,经常用到的echo功能。TCP client连接到server, 向server发送message,server端收到消息打印,并将消息返回给client。
server端代码:
import socket
import sys def start_tcp_server(ip, port):
#create socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = (ip, port)
#bind port
print 'starting listen on ip %s, port %s'%server_address
sock.bind(server_address) #starting listening, allow only one connection
try:
sock.listen(1)
except socket.error, e:
print "fail to listen on port %s"%e
sys.exit(1) while True:
print "waiting for connection"
client,addr = sock.accept()
print 'having a connection'
data = client.recv(1024)
print 'recving data:' + data print 'send data back'
client.sendall(data)
client.close() if __name__ == '__main__':
start_tcp_server('172.125.0.1', 12346)
client端代码:
import socket
import sys def start_tcp_client(ip, port): #server port and ip
server_ip = ip
servr_port = port tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try:
tcp_client.connect((server_ip, servr_port))
except socket.error:
print 'fail to setup socket connection'
else:
print 'sending..........'
tcp_client.sendall("echo message") print 'reading...........'
print tcp_client.recv(1024)
tcp_client.close() start_tcp_client('172.125.0.1', 12346)
这里面用到了收发函数,其中缓存的大小已经指定或者采用默认值。
如何查看一个连接的缓存大小并且在必要的时候修改它。
socket.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, size)
如果是接受方的缓存,参数名称为SO_RCVBUF.
socket.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, size)
我们增加代码加入参数,使用argparser 模块
client:
import socket
import sys
import argparse
def start_tcp_client(ip, port): #server port and ip
server_ip = ip
servr_port = port tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try:
tcp_client.connect((server_ip, servr_port))
except socket.error:
print 'fail to setup socket connection'
else:
print 'sending..........'
tcp_client.sendall("echo message") print 'reading...........'
print tcp_client.recv(1024)
tcp_client.close() if __name__ == '__main__':
arg = argparse.ArgumentParser(description='input port and ip')
arg.add_argument('-i', help='input the ip address')
arg.add_argument('-p', type=int, help='input the port')
args = arg.parse_args()
print 'ip : port ' + args.i +" " + str(args.p)
start_tcp_client(args.i, args.p)
server:
import socket
import sys
import argparse def start_tcp_server(ip, port):
#create socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = (ip, port)
#bind port
print 'starting listen on ip %s, port %s'%server_address
sock.bind(server_address) #starting listening, allow only one connection
try:
sock.listen(1)
except socket.error, e:
print "fail to listen on port %s"%e
sys.exit(1) while True:
print "waiting for connection"
client,addr = sock.accept()
print 'having a connection'
data = client.recv(1024)
print 'recving data:' + data print 'send data back'
client.sendall(data)
client.close() if __name__ == '__main__':
arg = argparse.ArgumentParser(description='input port and ip')
arg.add_argument('-i', help='input the ip address')
arg.add_argument('-p', type=int, help='input the port')
args = arg.parse_args()
print 'ip : port ' + args.i +" " + str(args.p)
start_tcp_server(args.i, args.p)
调用:
启动server:
# python socket_1_server.py -i 10.135.13.171 -p 12345
ip : port 10.135.13.171 12345
starting listen on ip 10.135.13.171, port 12345
waiting for connection
启动client:
# python socket_2_client.py -i 10.135.13.171 -p 12345
ip : port 10.135.13.171 12345
sending..........
reading...........
echo message
server侧打印:
having a connection
recving data:echo message
send data back
waiting for connectio
python - socket - connection的更多相关文章
- Python socket doesn't close connection properly
Python socket doesn't close connection properly The error information: [Errno 98] Address already in ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- python - socket - client端指定ip和端口
问题描述: 在设备中有3个NI, ip分别为192.168.1.5/6/7.其中本端192.168.1.6同对端192.168.1.10建立了一个tunnel. 我希望测试tunnel连通性, 对端起 ...
- Python socket编程之二:【struct.pack】&【struct.unpack】
import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...
- Python Socket,How to Create Socket Server? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Python Socket,How to Create Socket Cilent? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Python Socket Programming
本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的sock ...
- python socket之tcp服务器与客户端demo
python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...
随机推荐
- 安卓APP关于切图标
bin res drawable-hdpi drawable-ldpi drawable-mdpi drawable-nodpi drawable-xhdpi drawable-xxhdpi x越大代 ...
- Android 光线传感器的调用
1.activity如果要使用传感器,就必须实现SensorEventListener接口 2.得到传感器管理对象(sensormanager) 3.使用sensormanager.registerl ...
- TypeError: datetime.datetime(2016, 9, 25, 21, 12, 19, 135649) is not JSON serializable解决办法
1.一个简单的方法来修补json模块,这样序列将支持日期时间. import json import datetime json.JSONEncoder.default = lambda self, ...
- linux git安装及配置(包括更新)
1.在终端运行命令 sudo apt-get install git 2.查看版本号 git --version (若不是最新可更新 自选) 更新提示: sudo add-apt-repositor ...
- JavaScript——基本的瀑布流布局及ajax动态新增数据
本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能. 缺点: 1. 程序不是响应式,不能实时调整页面宽度: 2. 程序中当新增ajax ...
- Lua 读表代码,自动生成字段名字
表格格式为 INT STRING INT INT INT INT INT Id Desc Type SceneId OpenId MaxPliesp ClearancePlies 第1关 - 第2关 ...
- Unity3D 更新文件下载器
使用说明: 1)远端更新服务器目录 Package |----list.txt |----a.bundle |----b.bundle 2)list.txt是更新列表文件 格式是 a.bundle|r ...
- 使用poi读取xlsx中的数据
excel中的内容见下图: 详细代码: package dataprovider; import java.io.FileInputStream; import java.io.InputStream ...
- HTML5+CSS3+Jquery实现纯手工的垂直时光轴【附源码】
前言 由于工作中需要,系统中需要记录不同时间发生的事件,为了提升用户体验,决定用时光轴来实现.[据说这个东西挺火的,QQ空间和FB都在用...] 这个时光轴是在 三生石上 这位博主的时光轴基础上修改的 ...
- 【html+css】关于页面布局中遇到的问题记录
关于行内元素: 行内元素设置width无效, height无效(可以设置line-height), margin上下无效,padding上下无效,margin和padding可设置左右. text ...