前面有了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的更多相关文章

  1. Python socket doesn't close connection properly

    Python socket doesn't close connection properly The error information: [Errno 98] Address already in ...

  2. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  3. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  4. python - socket - client端指定ip和端口

    问题描述: 在设备中有3个NI, ip分别为192.168.1.5/6/7.其中本端192.168.1.6同对端192.168.1.10建立了一个tunnel. 我希望测试tunnel连通性, 对端起 ...

  5. Python socket编程之二:【struct.pack】&【struct.unpack】

    import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...

  6. Python Socket,How to Create Socket Server? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  7. Python Socket,How to Create Socket Cilent? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  8. Python Socket Programming

    本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的sock ...

  9. python socket之tcp服务器与客户端demo

    python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...

随机推荐

  1. css如何实现水平居中呢?css实现水平居中的方法?

    面试中遇到的一个问题:如何让css实现水平居中?下面来看一下哪些方法能实现水平居中. 首先分两种情况,行内元素还是块级元素.然而块级元素又分为定宽块状元素和不定款块状元素.先来看下行内元素如何水平居中 ...

  2. Java MySql 批量插入数据库addBatch

    //addBatch批量插入数据库 public static void insertCommentToMySql(Set<String> commentList) { Iterator& ...

  3. oss文件删除策略

    当你想删除oss服务中某个bucket下的文件夹时,文件夹中又包含了太多文件,递归删除太过耗时,又必须删除时,此时就要用oss的文件删除策略,如下所示: OSSClient client = new ...

  4. 【krpano】浏览点赞插件1.1(源码+介绍+预览)

    插件使用说明详见:http://www.cnblogs.com/reachteam/p/5479068.html 插件更新 1.新增测试模式 用户可以使用uid="test"进行本 ...

  5. javascript小技巧

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  6. iOS开发UI篇—CALayer简介

    iOS开发UI篇—CALayer简介   一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...

  7. MongoDB 安装

    年初换了个硬盘空间更大的vps,这下终于可以装MongoDB了. 1 配置包管理系统(yum) 建立 /etc/yum.repos.d/mongodb-org-3.2.repo文件.内容如下: [mo ...

  8. UVA 12544 - Beehives O(nm) 无向图最小环

    Bees are one of the most industrious insects. Since they collect nectarand pollen from flowers, they ...

  9. H5开发中的问题总结

    最近公司做了一个出行日记的项目,里面的页面十多页,天天加班,做到吐血.总体来说,写页面的时候虽然是十多个页面,其实难度还是在每个页面的特效上.公司是易到用车,出行日记的页面在APP里有生成入口,有兴趣 ...

  10. YUM源设置

    1挂载光盘 先创建一个文件 /aaa 然后挂载mount /dev/cdrom /aaa 进入 /aaa   ls 查看是否挂载OK 2进入yum文件夹.将除Media以外的所有文件名改为XXXXXX ...