前面有了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. sql语句,多个表之间,通过相同内容字段的联合查询

    1 , select j.id,         jt.Name,        j.ApproveType ,         j.ProductCode,         j.CustomerCo ...

  2. window跳转页面

    1.直接的事件跳转 window.location.href="你所要跳转的页面"; 2.新窗口跳转 window.open('你所要跳转的页面'); 3.返回上一页 window ...

  3. jquery向苹果或者android发送请求

    var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; return { ...

  4. AngularJS 初用总结

    一直用惯jquery,初用Angularjs的初段时间,需要先了解一下她的类MVC思想. 初学时几个比较基本的概念: 1.客户端模板 2. Model View Controller (MVC) 3. ...

  5. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  6. Struts2与Struts1的区别

    Struts2是基于WebWork的一个全新框架.不过有了Struts1的基础,学Struts2更方便.Struts2主要改进是取代了Struts1的Servlet和Action.Struts2的核心 ...

  7. Pyqt show和exec的区别

    Pyqt中 QDialog  show和exec的区别 QDialog的显示有两个函数show()和exec().他们的区别在参考文档上的解释如下: show():显示一个非模式对话框.控制权即刻返回 ...

  8. fscanf使用

    函数名: fscanf 简述:C语言中基本的文件操作 功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束.这与fgets有区别,fgets遇到空格不结束. 简单的说 ...

  9. .NET开发者如何愉快的进行微信公众号开发

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这篇文章只是一个如何提高开发效率的简单指导和记录,不会涉及具体的微信公众号开发内容. ...

  10. mysql数据库引擎

    看某个使用的引擎,在显示结果里参数engine后面的就表示该表当前用的存储引擎:mysql> show create table 表名; 看mysql支持哪些存储引擎:mysql> sho ...