socket python实例_python socket实例

1.客户端向服务端发送

#coding:utf-8

'''客户端'''

import socket

khd=socket.socket() #声明socket类型,同时生产socket连接对象

khd.connect(('localhost',2345)) #连接

khd.send('应用')

data=khd.recv(1024)

print("recv:",data)

khd.close()

#coding:utf-8

'''服务端'''

import socket

fuwud=socket.socket() #()内不写东西的话,代表第一个地址簇AF.INET

fuwud.bind(('localhost',2345)) #绑定要监听端口

fuwud.listen(5) #监听

print"等待中。。。。"

conn,addr=fuwud.accept() #等数据进来

#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址addr对方的地址

print conn,addr

print'开始了!'

data=conn.recv(1024)

print "recv:",data

conn.send(data.upper())

fuwud.close()

先运行服务端再运行客户端

结果:

等待中。。。。

('127.0.0.1', 64335)  这里的端口64335是随机的。

开始了!

recv: 应用

注:khd.send(b'holle,world') 这里的byci只解释acssii的数据,发送中文不用添加b

2.服务器接受客户端发来的4次消息后,自动断开。

#coding:utf-8

'''服务端'''

import socket

fuwud=socket.socket()

fuwud.bind(('localhost',2345)) #绑定要监听端口

fuwud.listen(5) #监听

print"等待中。。。。"

while True:

conn,addr=fuwud.accept() #等数据进来

#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址

print conn,addr

print'开始了!'

c=0

while True:

data=conn.recv(1024)

print "recv:",data

conn.send(data.upper())

if c>4: #从客户端接受4次 ,服务器端自动断开。

break

c=c+1

print c

fuwud.close()

#coding:utf-8

'''客户端'''

import socket

khd=socket.socket() #声明socket类型,同时生产socket连接对象

khd.connect(('localhost',2345)) #连接

while True:

khd_data=raw_input('>>:')

if len(khd_data) == 0:continue #send不能发送空值

khd.send(khd_data)

data=khd.recv(1024)

print("recv:",data)

khd.close()

3.服务器端可以实现接受多个线程的信息。

#coding:utf-8

'''服务端'''

import socket

fuwud=socket.socket()

fuwud.bind(('localhost',2345)) #绑定要监听端口

fuwud.listen(5) #监听

print"等待中。。。。"

while True:

conn,addr=fuwud.accept() #等数据进来

#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址

print conn,addr

print'开始了!'

c=0

while True:

data=conn.recv(1024)

print "recv:",data

conn.send(data.upper())

c=c+1

if c>4:

break

print c

fuwud.close()

运行多个客户端。

#coding:utf-8

'''客户端'''

import socket

khd=socket.socket() #声明socket类型,同时生产socket连接对象

khd.connect(('localhost',2345)) #连接

while True:

khd_data=raw_input('>>:')

if len(khd_data) == 0:continue

khd.send(khd_data)

data=khd.recv(1024)

print("recv:",data)

khd.close()

4.服务器、客户端实现系统操作

#coding:utf-8

'''服务端'''

import os

import socket

fuwud=socket.socket()

fuwud.bind(('localhost',2345)) #绑定要监听端口

fuwud.listen(5) #监听

print"等待中。。。。"

while True:

conn,addr=fuwud.accept() #等数据进来

#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址

print conn,addr

print'开始了!'

c=0

while True:

data=conn.recv(1024)

print "recv:",data

res=os.popen(data).read()

conn.send(res)

c=c+1

if c>4:

break

print c

fuwud.close()

#coding:utf-8

'''客户端'''

import socket

khd=socket.socket() #声明socket类型,同时生产socket连接对象

khd.connect(('localhost',2345)) #连接

while True:

khd_data=raw_input('>>:')

if len(khd_data) == 0:continue

khd.send(khd_data)

data=khd.recv(1024)

print("recv:",data)

khd.close()

5.服务端:

sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

参数一:地址簇

socket.AF_INET IPv4(默认)  socket.AF_INET6 IPv6

socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

参数二:类型

socket.SOCK_STREAM  流式socket , for TCP (默认)  socket.SOCK_DGRAM   数据报式socket , for UDP

socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。  socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。  socket.SOCK_SEQPACKET 可靠的连续数据包服务

参数三:协议

0  (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议

具体参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html

import socket

server=socket.socket(AF_INET,sock.SOCK_STREAM)

server.bind(localhost,9999) 绑定端口监听

server.listen()

while true: #可以接受新的链接

conn,addr=server.accept()#阻塞

while true:

data=conn.recv(8192)#recv默认是阻塞的

if not data:

break #避免客户端断开,conn.recv收到的是空数据

conn.send(data.upper())#如果发送出去

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值