码迷,mamicode.com
首页 > 其他好文 > 详细

基于TCP协议的socket编程

时间:2017-12-03 19:03:47      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:std   根目录   服务   设计   tcp   red   简单   exception   分时   

什么是socket

  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

  所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

    也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序 而程序的pid是同一台机器上不同进程或者线程的标识。

基于网络类型的套接字家族

套接字家族的名字:AF_INET

(还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)

代码示例:

服务端

import   socket
import  os
import pickle
#创建一个socket对象
s  = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#绑定服务端程序的IP地址和端口号
s.bind((127.0.0.1,7895))
#开始TCP监听
s.listen(5)#设置半连接池的大小
#被动接受TCP客户的连接,等待连接的到来

while True:
    con, add = s.accept()
    # print(‘等待客户端接入‘)
    # 打印客户端的连接信息
    print(add)
    while True:
        try:
            # 接收客户端发送的数据
            data = int(con.recv(1024))
            print(data)
            # 打印数据
            if data  == 1:
                res = os.listdir(os.chdir(c:\\))
                #将列表转换为二进制
                res = pickle.dumps(res)
                con.send(res)
            elif  data == 2:
                res = os.getcwd()
                res = pickle.dumps(res)
                con.send(res)
        except Exception:
            break
    con.close()
s.close()
import  socket
import  pickle
# from  socket  import  *
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect((127.0.0.1,7895))
msg = ‘‘‘
请输入操作序号:
    1.打印C盘根目录下的文件
    2.打印当前路径
    ‘‘‘
print(msg)
while True:
    str = input(>>>:)
    #若输入为空,则重新输入
    if not  str:continue
    s.send(str.encode(utf-8))
    data = s.recv(1024)
    #反序列化
    res = pickle.loads(data)
    print(res)

s.close()

 

 

基于TCP协议的socket编程

标签:std   根目录   服务   设计   tcp   red   简单   exception   分时   

原文地址:http://www.cnblogs.com/liuyinzhou/p/7966740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!