=======客户端请求一次成功后,服务器一直处于获取客户端的死循环中=======
服务器端:
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