python --- socket服务器与客户端各种状态案例

=======客户端请求一次成功后,服务器一直处于获取客户端的死循环中=======

服务器端:

root@kali:~/python/socket# pwd
/root/python/socket
root@kali:~/python/socket# ls
socket_server.py  socket_server_using.py
root@kali:~/python/socket# 

客户短端:

root@kali:~/python/socket# pwd
/root/python/socket
root@kali:~/python/socket# ls
socket_client.py  socket_client_using.py
root@kali:~/python/socket# 

服务器端代码与运行:

root@kali:~/python/socket# vi socket_server_using.py 
root@kali:~/python/socket# cat socket_server_using.py 
#!/usr/bin/python
# --*-- coding:utf-8 --*--
#服务器端的ip地址192.168.72.129,编写的文件socket_server.py
#客户端的地址ip192.168.72.130,需要编写文件socket_client.py

import socket#导入socket模块
import time#导入时间模块

host = ''#''与‘0.0.0.0’表示所有机器都可以连接,'192.168.72.130'连接特定机器
port = 7777#表示启用端口7777,不能使用双引号
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))#绑定主机与端口
s.listen(2)#启用两个监听2进程
conn, addr = s.accept()#地址接收所有的连接

#--------以上代码为socket server端-------------
while 1:#会出现客户端请求完成后,服务器端一直没有中断,使服务器处于死循环中
    print 'Got connection from:' , addr#打印连接地址
    #while 1:#为死循环,如果不使用while循环的话,就执行一次就退出
    data = conn.recv(4096)#一次性可以连接4096字节
    print 'get data',data#打印客户端请求的数据
    if not data:#如果没有收到客户端数据就继续接收
        time.sleep(1.5)#每次暂停1.5秒
        continue
    #if not data:break#没有接收任何数据就break连接
    #conn.sendall(data)#如果有数据就全部原样回显
    conn.sendall(data.upper())#如果有数据就全部回显,并且把回显的字母全部变成大写字母
conn.close()#如果break话,就关闭会话


代码运行:服务器端接收一次客户端数据成功后,就处于死循环中
root@kali:~/python/socket# python socket_server_using.py 
Got connection from: ('192.168.72.130', 49860)
get data hello world!!
Got connection from: ('192.168.72.130', 49860)
get data 
Got connection from: ('192.168.72.130', 49860)
get data 
Got connection from: ('192.168.72.130', 49860)
get data 
Got connection from: ('192.168.72.130', 49860)
get data 
Got connection from: ('192.168.72.130', 49860)
get data 
Got connection from: ('192.168.72.130', 49860)
get data 
Got connection from: ('192.168.72.130', 49860)
get data 
Got connection from: ('192.168.72.130', 49860)
get data 
^CTraceback (most recent call last):
  File "socket_server_using.py", line 23, in <module>
    time.sleep(1.5)#每次暂停1.5秒
KeyboardInterrupt

客户端代码与运行:

root@kali:~/python/socket# vi socket_client_using.py 
root@kali:~/python/socket# cat socket_client_using.py 
#!/usr/bin/python
# --*-- coding:utf-8 --*--
#客户端的地址ip192.168.72.130,编写文件为socket_client.py

import socket#导入socket模块

host = '192.168.72.129'#服务器端的ip地址
port = 7777#服务器端的端口
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#启用ipv4的tcp/ip协议与类型
s.connect((host,port))#连接服务器端的主机与端口

#--------以上为客户端的代码信息-------------

#--------以下为客户端发送一次性的信息,有while 1:才是死循环发送信息-----

s.sendall('hello world!!')#客户端发送的信息
data = s.recv(4096)#服务器端返回信息就赋值给data
s.close()#不返回信息就断开连接
print 'received',repr(data)#打印返回的信息


代码运行:客户端发送成功一次数据
root@kali:~/python/socket# vi socket_client_using.py 
root@kali:~/python/socket# python  socket_client_using.py 
received 'HELLO WORLD!!'

===============================================

++++++++客户端请求一次,服务器端获取一次信息++++++++++++++
服务器端:

root@kali:~/python/socket# ls
socket_server_ok.py  socket_server.py  socket_server_using.py
root@kali:~/python/socket# clear
root@kali:~/python/socket# vi socket_server_ok.py 
root@kali:~/python/socket# cat socket_server_ok.py

客户端:

root@kali:~/python/socket# pwd
/root/python/socket
root@kali:~/python/socket# ls
socket_client_ok.py  socket_client.py  socket_client_using.py
root@kali:~/python/socket# 

服务器端代码与运行:

root@kali:~/python/socket# vi socket_server_ok.py 
root@kali:~/python/socket# cat socket_server_ok.py 
#!/usr/bin/python
# --*-- coding:utf-8 --*--
#服务器端的ip地址192.168.72.129,编写的文件socket_server.py
#客户端的地址ip192.168.72.130,需要编写文件socket_client.py

import socket#导入socket模块
import time

host = ''#''与‘0.0.0.0’表示所有机器都可以连接,'192.168.72.130'连接特定机器
port = 7777#表示启用端口7777,不能使用双引号
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))#绑定主机与端口
s.listen(2)#启用两个监听客户端进程

while 1:#每次服务器重新获取客户端的请求
    conn, addr = s.accept()#地址接收所有的连接

    #--------以上代码为socket server端-------------

    #while 1:#会出现客户端请求完成后,服务器端一直没有中断,使服务器处于死循环中
    print 'Got connection from:' , addr#打印连接地址
    #while 1:#为死循环,如果不使用while循环的话,就执行一次就退出
    data = conn.recv(4096)#一次性可以连接4096字节
    print 'get data',data#打印客户端请求的数据
    if not data:#如果没有收到客户端数据就继续接收
        time.sleep(1.5)#每次暂停1.5秒
        continue
    #if not data:break#没有接收任何数据就break连接
    #conn.sendall(data)#如果有数据就全部原样回显
    conn.sendall(data.upper())#如果有数据就全部回显,并且把回显的字母全部变成大写字母
conn.close()#如果break话,就关闭会话

服务器端返回4次信息:
root@kali:~/python/socket# python socket_server_ok.py 
Got connection from: ('192.168.72.130', 49867)
get data hello world!!
Got connection from: ('192.168.72.130', 49868)
get data hello world!!
Got connection from: ('192.168.72.130', 49869)
get data hello world!!
Got connection from: ('192.168.72.130', 49870)
get data hello world!!

客户端代码与运行:

root@kali:~/python/socket# vi socket_client_ok.py 
root@kali:~/python/socket# cat socket_client_ok.py 
#!/usr/bin/python
# --*-- coding:utf-8 --*--
#客户端的地址ip192.168.72.130,编写文件为socket_client.py

import socket#导入socket模块

host = '192.168.72.129'#服务器端的ip地址
port = 7777#服务器端的端口
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#启用ipv4的tcp/ip协议与类型
s.connect((host,port))#连接服务器端的主机与端口

#--------以上为客户端的代码信息-------------

#--------以下为客户端发送一次性的信息,有while 1:才是死循环发送信息-----

s.sendall('hello world!!')#客户端发送的信息
data = s.recv(4096)#服务器端返回信息就赋值给data
s.close()#不返回信息就断开连接
print 'received',repr(data)#打印返回的信息


客户端请求4次:
root
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐为波

看着给就好了,学习写作有点累!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值