例子:使用socket服务进行连接
服务器端ip192.168.1.110,端口7777
客户端ip192.168.1.114,端口7777
先运行服务器端脚本,在运行客户端脚本
服务器端:
root@kali:~/python/socket# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:eb:27:43
inet addr:192.168.1.110 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feeb:2743/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20558 errors:0 dropped:0 overruns:0 frame:0
TX packets:4842 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8740022 (8.3 MiB) TX bytes:573244 (559.8 KiB)
Interrupt:19 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:100 errors:0 dropped:0 overruns:0 frame:0
TX packets:100 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6000 (5.8 KiB) TX bytes:6000 (5.8 KiB)
root@kali:~/python/socket#
root@kali:~/python/socket# pwd
/root/python/socket
root@kali:~/python/socket# ls
socket_server.py
root@kali:~/python/socket#
代码如下:
root@kali:~/python/socket# vi socket_server.py
root@kali:~/python/socket# cat socket_server.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
#服务器端的ip地址192.168.1.110,编写的文件socket_server.py
#客户端的地址ip192.168.1.114,需要编写文件socket_client.py
import socket#导入socket模块
host = ''#''与‘0.0.0.0’表示所有机器都可以连接,'192.168.1.123'连接特定机器
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端-------------
print 'Got connection from:' , addr#打印连接地址
while 1:#为死循环,如果不使用while循环的话,就执行一次就退出
data = conn.recv(4096)#一次性可以连接4096字节
if not data:break#没有接收任何数据就break连接
conn.sendall(data)#如果有数据就全部回显
#conn.sendall(data.upper())#如果有数据就全部回显,并且把回显的字母全部变成大写字母
conn.close()#如果break话,就关闭会话
服务器运行:
root@kali:~/python/socket# python socket_server.py
Got connection from: ('192.168.1.114', 46451)
客户端:
root@kali:~/python/socket# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:ed:db:6f
inet addr:192.168.1.114 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feed:db6f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19959 errors:0 dropped:0 overruns:0 frame:0
TX packets:4188 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9832363 (9.3 MiB) TX bytes:451329 (440.7 KiB)
Interrupt:19 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:96 errors:0 dropped:0 overruns:0 frame:0
TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5760 (5.6 KiB) TX bytes:5760 (5.6 KiB)
root@kali:~/python/socket#
root@kali:~/python/socket# pwd
/root/python/socket
root@kali:~/python/socket# ls
socket_client.py
root@kali:~/python/socket#
代码如下:
root@kali:~/python/socket# vi socket_client.py
root@kali:~/python/socket# cat socket_client.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
#客户端的地址ip192.168.1.114,编写文件为socket_client.py
import socket#导入socket模块
host = '192.168.1.110'#服务器端的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# python socket_client.py
received 'hello world!!'
-----------------------------------------------------
服务器端启用:
conn.sendall(data.upper())#如果有数据就全部回显,并且把回显的字母全部变成大写字母
客户端运行脚本:
root@kali:~/python/socket#
root@kali:~/python/socket# python socket_client.py
received 'HELLO WORLD!!'
root@kali:~/python/socket#