本篇文章为大家展示了如何进行socket通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为网站设计制作、成都做网站,重庆App定制开发以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。创新互联深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
一、使用socket实现一对一的简单通信
socket就是一个开往网络应用必备的功能模块。通过这个模块我们可以自己写程序的server端和client端,可以自己定义server端对外提供服务器的ip地址和端口。学会使用这个模块的之后我们不仅可以开往网络程序,还可以利用socket模块开发出端口扫描的程序。
先看一段创建服务器端的代码
# -*- coding: utf-8 -*-
import socket
import os
#定义服务器端启动后要绑定的ip和端口
ip_port = ('0.0.0.0',9999)
# 创建socket对象并指定连接的网络类型和传输协议
sk=sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定ip和端口号
sk.bind(ip_port)
#启动监听,并设置最多可以通知连入连接数
sk.listen(5)
#用while使程序一直运行
while True:
#print 'server waiting...'
"""
进入accpet阻塞状态来等待客户端的连接请求
保存客户端的连接状态和客户端的地址
"""
conn,addr = sk.accept()
print addr
#如果有客户端发来请求就每次都只接受1024个字节的内容,注意recv()也是阻塞的
client_data = conn.recv(10240)
#打印从客户端接收到的字符串
print client_data ----客户端ip地址
#向客户端发送字符串
conn.sendall("I`m server")
#关闭连接
conn.close()
客户端代码
# -*- coding: utf-8 -*-
- import socket#指定server端的ip地址和端口号ip_port = ('127.0.0.1',9999)#创建socket实例,参数不填的话就采用ipv4协议通过tcp传输sk = socket.socket()#发起连接到server端sk.connect(ip_port)#给server端发消息sk.sendall("I`m client")#发送完成后接收server端的反馈server_reply = sk.recv(1024)#打印server端反馈的信息print server_reply#关闭连接sk.close()
通过以上两段代码的运行,我们就实现了server端与client端的通信
在server端可以到如下运行结果,接收到客户端请求之后又恢复到了等待状态
server waiting...
I`m client
server waiting...
在client端也看到了类似的结果,成功接收到了server端的发来的信息之后退出了程序
点击(此处)折叠或打开
I`m server
拓展:实时解析客户端的日志文件并发送至服务端保存
server端改写
# -*- coding: utf-8 -*-
import socket
import os
def save_to_txt(addr,data):
path='/tmp/'+addr+'/slow.log'
file_path = os.path.split(path)
if not os.path.exists( file_path[0] ):
os.makedirs( file_path[0] )
print '创建目录成功'
if len(data)>0:
try:
with open( path.encode('utf-8'),'ab' ) as f:
data = data+"\n"
f.write( data.encode('utf-8') )
except:
print '数据插入失败'
else:
print '没有数据'
#定义服务器端启动后要绑定的ip和端口
ip_port = ('0.0.0.0',9999)
# 创建socket对象并指定连接的网络类型和传输协议
sk=sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定ip和端口号
sk.bind(ip_port)
#启动监听,并设置最多可以通知连入连接数
sk.listen(5)
#用while使程序一直运行
while True:
#print 'server waiting...'
"""
进入accpet阻塞状态来等待客户端的连接请求
保存客户端的连接状态和客户端的地址
"""
conn,addr = sk.accept()
print addr
#如果有客户端发来请求就每次都只接受1024个字节的内容,注意recv()也是阻塞的
client_data = conn.recv(10240)
#打印从客户端接收到的字符串
print client_data
save_to_txt(addr[0],client_data) ----接送并写入日志文件
#向客户端发送字符串
conn.sendall("I`m server")
#关闭连接
conn.close()
client改写
# -*- coding: utf-8 -*-
import socket
def sendtxt(line):
ip_port = ('192.168.2.136',9999)
#创建socket实例,参数不填的话就采用ipv4协议通过tcp传输
sk = socket.socket()
#发起连接到server端
sk.connect(ip_port)
#给server端发消息
sk.sendall(line)
#发送完成后接收server端的反馈
server_reply = sk.recv(10240)
#打印server端反馈的信息
print server_reply
#关闭连接
sk.close()
import fileinput
import time
import os
target_file = 'log.txt'
init_flag = True # 初次加载程序
record_count = 0
while True:
if init_flag:
#读取整个文件
# for eachline in fileinput.input(target_file):
# print eachline
# record_count += 1
total_count = os.popen('wc -l %s' % target_file).read().split()[0]
total_count = int(total_count)
record_count = total_count
init_flag = False
else:
#如果总行数小于当前行,那么认为文件更新了,从第一行开始读。
total_count = os.popen('wc -l %s' % target_file).read().split()[0]
total_count = int(total_count)
if total_count < record_count:
record_count = 0
for eachline in fileinput.input(target_file):
line_no = fileinput.filelineno()
if line_no > record_count:
if len(eachline.strip('\n')) > 0:
print eachline.strip('\n')
sendtxt(eachline.strip('\n')) --发送
record_count += 1
else:
sendtxt(' ')
record_count += 1
上述内容就是如何进行socket通信,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
文章标题:如何进行socket通信
标题URL:http://scgulin.cn/article/gepecg.html