`
wangtong40
  • 浏览: 249210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python 客户端Socket编程

阅读更多

第2章    网络客户端
网络客户端开发步骤:
1、    建立socket对象。
2、    调用connect()建立连接

2.1    建立Socket

import socket

print "Creating socket...."
# socket.socket(协议,通讯方式) 创建socket对象
# socket.AF_INET使用PIV4协议;
# socket.SOCK_STREAM TCP通讯方式
# socket.SOCK_DGTAM UDP通讯方式
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Done'
print 'Connecting to remote host...'
# 连接服务器: IP,port
s.connect(("10.10.151.70", 8080))
print 'done.'
 


2.2    寻找端口号

import socket

print 'Create socket...'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'done'

print 'Looking up port number...'
# 通过socket的getservbyname()函数查询端口号
port = socket.getservbyname('http', 'tcp')
print 'done.'

print 'Connecting to remote host on port %d...' % port
s.connect(('www.google.com', port))
print 'done.'
 



2.3    获取socket信息

import socket

print 'Creating socket...'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'done.'

s.connect(('localhost', 8080))
print 'done.'
# 显示本机的IP地址和端口号
print 'Connected from', s.getsockname()
# 显示远端服务器的IP地址和端口号
print 'Connected to ', s.getpeername()
 


2.4    socket通信
Socket通讯Python提供了2中方式:socket对象和文件类对象。
1、    socket对象:send()、sendto()、recv()、recvfrom()等方法。
2、    文件类对象:read()、write()、readline()。


Socket对象适用范围:
读写数据时,需要协议详细控制时、使用二进制协议传送固定大小数据时、数据超时处理时还有编写UDP程序时,socket对象都是很好的选择。
文件类对象适用范围:用于面向线性的协议,他能通过提供的readline()函数自动处理大多数解析,但是对于UDP协议支持不好。

2.4.1    Socket对象实例

import socket, sys

host = sys.argv[1] #主机IP
textport = sys.argv[2] #端口号
filename = sys.argv[3] #服务器文件名称

#建立socket对象
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
    print 'Strange error creating socket:%s' % e
    sys.exit(1)

#解析端口号
try:
    port = int(textport)
except  ValueError:
    try:
        port = socket.getservbyname(textport, 'tcp')
    except socket.error, e:
        print 'Couldn not find your port:%s' % e
        sys.exit(1)

#创建连接
try:
    s.connect((host, port))
except socket.gaierror, e:
    print 'Address-related error connecting to server :%s' % e
    sys.exit(1)
except socket.error, e:
    print 'Connection error:%s' % e
    sys.exit(1)

#发送文件
try:
    s.sendall("GET %s HTTP/1.0\r\n\r\n" % filename)
except socket.error, e:
    print 'Error sending data:%s' % e
    sys.exit(1)

#清除缓存内容
try:
    s.shutdown(1)
except socket.error, e:
    print 'Error sending data:%s' % e
    sys.exit(1)


while True:
    try:
        buf = s.recv(2048) #接收数据
    except socket.error, e:
        print 'Error receiving data:%s' % e
        sys.exit(1)
    if not len(buf):
        break
    sys.stdout.write(buf)
 

       
2.4.2    文件类对象实例
i

mport socket, sys, time

host = sys.argv[1]
textport = sys.argv[2]
filename = sys.argv[3]

#创建socket对象
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
    print 'Strange error creating socket:%s' % e
sys.exit(1)

#创建端口号
try:
    port = int(textport)
except  ValueError:
    try:
        port = socket.getservbyname(textport, 'tcp')
    except socket.error, e:
        print 'Couldn not find your port:%s' % e
        sys.exit(1)

#连接socket
try:
    s.connect((host, port))
except socket.gaierror, e:
    print 'Address-related error connecting to server :%s' % e
    sys.exit(1)
except socket.error, e:
    print 'Connection error:%s' % e
    sys.exit(1)

fd = s.makefile('rw', 0) #使用文件类对象
print 'sleeping...'
time.sleep(10) #线程休息10S
print 'Continuing...'


try:
    s.sendall("GET %s HTTP/1.0\r\n\r\n" % filename)
except socket.error, e:
    print 'Error sending data:%s' % e
    sys.exit(1)

try:
    fd.flush()
except socket.error, e:
    print 'Error sending data: %s' % e
    sys.exit(1)

try:
    s.shutdown(1)
    s.close()
except socket.error, e:
    print 'Error sending data:%s' % e

while True:
    try:
        buf = fd.read(2048)
    except socket.error, e:
        print 'Error receiving data:%s' % e
        sys.exit(1)
    if not len(buf):
        break
    sys.stdout.write(buf)
 


2.5    UDP通信
UDP通信不使用文件类对象,因为他不能为数据如何发送和接收提供足够的控制。

import socket, sys
host = sys.argv[1]
textport = sys.argv[2]
# 使用SOCK_DGRAM 报文
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
    port = int(textport)
except ValueError:
    # 使用UDP协议
    port = socket.getservbyname(textport, 'udp')
   
s.connect((host, port))
print 'Enter data to transmit:'
data = sys.stdin.readline().strip()
s.sendall(data)
print 'Looking for replies; press Ctrl-C or Ctrl-Break to stop.'

while True:
    buf = s.recv(2048)
    if not len(buf):
        break
    sys.stdout.write(buf)
 

 

3
0
分享到:
评论

相关推荐

    Python 中的 Socket 编程

    Python 中的 Socket 编程 说明 译者注 授权 开始 Socket API 概览 TCP Sockets 客户端 / 服务器echo 程序 echo 程序的服务端 echo 程序的客户端 运行echo 程序的客户端和服务端 查看 socket 状态 通信流程的分解 ...

    python socket编程实例(服务端及客户端)

    本代码是python实现的socket实例代码,包括客户端和服务端。 server.py为服务端。 client.py为客户端。

    python的socket编程.zip

    Python 网络编程简单实例,使用socket()函数,bind()函数,connect()函数,实现TCP 服务端,客户端的建立,资料包含server.py和client.py文件,两个py文件在2个终端分别运行,二者可互相通信,分别用网络调试助手也...

    Python Socket多人聊天编程

    python实现的socket编程,能够实现多人聊天 客户端和服务器的界面都是命令行 主要运用知识有:1.socket2多线程

    python网络编程socket实现服务端、客户端操作详解

    主要介绍了python网络编程socket实现服务端、客户端操作,结合实例形式分析了python基于socket实现服务端、客户端相关操作技巧与使用注意事项,需要的朋友可以参考下

    python多线程socket编程之多客户端接入

    Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块...desc:socket编程客户端,python3.6.2 ''' import socket,sys HOST = '192.168.1.6' PORT = 8998 ADDR =(HOST,PORT)

    Python socket网络编程TCP/IP服务器与客户端通信

    Python socket网络编程 初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深入很多,自己看来也是一知半解...

    python socket客户端和服务器UDP通信编程示例

    python socket客户端和服务器UDP通信编程示例,包含client.py和server.py两个文件,先打开server监听,再打开client输入文字,通过UDP和server通信,client的消息可以被server接收并打印。

    SOCKET编程之TCP客户端

    基于SOCKET编程,采用TCP连接方法编写的客户端,可以连接指定IP端口的服务器,然后接受服务器内容,也可以发送数据到服务器。

    Python实现的多人聊天室源码,基于socket tcp通信,使用tkinter做客户端界面,含可执行文件

    Python实现的多人聊天室源码,基于socket tcp通信,使用tkinter做客户端界面;一个多人同时在线的聊天系统;

    python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法。分享给大家供大家参考。具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: 复制代码 代码如下:#server.py  import socket  def ...

    基于udp的socket编程实例

    自己用MFC对话框程序实现的基于UDP的socket编程示例,分为客户端和服务端,客户端发送一个字符串,服务端接收。代码简单明了,无论是学习还是拿到自己的项目中使用都很好。

    python-socket-programming-tutorial:python socket编程教程

    为了开始我们的套接字世界之旅,我们将在 python 中进行 tcp socket 编程。 首先,让我们从创建一个套接字开始创建套接字要创建套接字,我们可以使用 python 的 。 现在让我们创建一个: # Code 1.pyimport sockets...

    基于python的简单UDP socket编程

    内容概要:基于python的简单UDP socket编程 目标人群:具有一定python编程基础和计算机网络基础知识的人群 使用场景:Python3 功能介绍:基于python的UDP scoket编程,模拟UDP传输方式的信息传输,有服务端和客户端...

    Python 的 Socket 编程

    而Python使得网络socket编程入门变得超级简单。在这篇简介里面我们将创建一个简单服务器,用于接受和相应客户端程序的请求。 由于本人最近对 Linux Containers 有点痴迷,因此我们也将在服务器中实现2个容器。同时在...

    socket.zip_python socket_socket

    用python写的socket编程小例子 1.分客户端和服务器端 2.握手后可以进行信息交流

    Python Socket编程入门教程

    这是用来快速学习 Python Socket 套接字编程的指南和教程。Python 的 Socket 编程跟 C 语言很像。 Python 官方关于 Socket 的函数请看 http://docs.python.org/library/socket.html 基本上,Socket 是任何一种计算机...

    Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

    本文实例讲述了Python 网络编程之TCP客户端/服务端功能。分享给大家供大家参考,具体如下: demo.py(TCP客户端): import socket def main(): # 1. 创建tcp的套接字 tcp_socket = socket.socket(socket.AF_INET...

Global site tag (gtag.js) - Google Analytics