设为首页 加入收藏

TOP

day7 socket网络编程基础(一)
2017-09-30 17:24:11 】 浏览:9896
Tags:day7 socket 网络编程 基础

Socket

Socket是什么?

    下面来看一下网络的传输过程:

   

    上面图片显示了网络传输的基本过程,传输是通过底层实现的,有很多底层,我们写传输过程的时候,要知道所有的过程那就太复杂了,socket为我们封装了底层的传输流程,让我们直接可以在socket上直接实现数据交换。

    socket本质:对底层网络协议的封装。

    socket实现数据的发送和接收,通过什么建立连接呢?下面看一幅简单的图片:

      

    在计算机上,我们运行了很多线程,我们如何实现数据的定向交换呢?如何实现客户端和服务器的连接呢?连接我们可以通过IP地址进行连接,连接上之后发送给那个程序呢?这时候我们就要通过port(端口号)进行指明,因为实现连接的过程是通过IP+端口号(port)进行连接。

    客户端

 

import socket
while True:
    s = socket.socket()
    '''生成一个socket连接'''
    s.connect(("localhost",6970))   #建立连接,连接本地,端口号是6969端口

    message = input("请输入您要发送的信息:").encode('utf-8')
    if message == "quit":
        break
    s.sendall(message)   #python3上只能传输二进制字节
    data = s.recv(1024)      #接收服务器端传来的内容
    print(data)

s.close()   #关闭连接

 

    上面代码就是客户端,通过客户端发送数据到服务器,实现交互,客户端加上了一个while循环,能够实现多次交互,我们知道,正常情况下,交互一次就退出了,通过While循环,让客户端不停的产生新的连接,就能不断与客户端进行数据交换。

    下面是客户算发送的数据,只能以字符的形式进行发送,所以发送的是字符,汉字看不到,进行转换了。而且不知道为什么,输入空之后,客户端没有响应,静止不动了:

请输入您要发送的信息:dasfda
b'dasfda'
请输入您要发送的信息:不能发送汉字吗
b'\xe4\xb8\x8d\xe8\x83\xbd\xe5\x8f\x91\xe9\x80\x81\xe6\xb1\x89\xe5\xad\x97\xe5\x90\x97'
请输入您要发送的信息:放大法是否对
b'\xe6\x94\xbe\xe5\xa4\xa7\xe6\xb3\x95\xe6\x98\xaf\xe5\x90\xa6\xe5\xaf\xb9'
请输入您要发送的信息:dfafdas
b'dfafdas'
请输入您要发送的信息:dfasdfa
b'dfasdfa'
请输入您要发送的信息:dfasfd
b'dfasfd'
请输入您要发送的信息:afdasdfas
fb'afdasdfas'
请输入您要发送的信息:dasfda
b'fdasfda'
请输入您要发送的信息:dfa
fdab'dfa'
请输入您要发送的信息:
b'fda'
请输入您要发送的信息:afasfda
b'afasfda'
请输入您要发送的信息:afdasfd
b'afdasfd'
请输入您要发送的信息:afdasdfa
b'afdasdfa'
请输入您要发送的信息:

服务器

 

import socket

'''生成socket实例'''
s = socket.socket()
s.bind(("localhost",6970))    #绑定本地IP和6969端口号
s.listen(10)     #监听客户端发送的信息,一旦有客户端发送过来连接,就接收,现在是等待状态,防止堵塞
print("连接建立完毕,正在等待数据.......")
while True:
    conn,addr = s.accept()    #接收数据,accept()会接收两个数据,一个是连接conn,一个是地址addr(IP和端口号)
    print("Addr:",addr)
    data = conn.recv(1024)   #通过连接接收数据
    print(data)
    conn.send(data)      #发送数据,把接收到的信息发送

conn.close()
s.close()

 

     上面是服务器的代码,我们也使用了一个循环,让服务器一直挂着,等待客户端发送数据,不停的接收:

    下面是服务器接收的数据:

连接建立完毕,正在等待数据.......
Addr: ('127.0.0.1', 51924)
b'dasfda'
Addr: ('127.0.0.1', 51926)
b'\xe4\xb8\x8d\xe8\x83\xbd\xe5\x8f\x91\xe9\x80\x81\xe6\xb1\x89\xe5\xad\x97\xe5\x90\x97'
Addr: ('127.0.0.1', 51928)
b'\xe6\x94\xbe\xe5\xa4\xa7\xe6\xb3\x95\xe6\x98\xaf\xe5\x90\xa6\xe5\xaf\xb9'
Addr: ('127.0.0.1', 51930)
b'dfafdas'
Addr: ('127.0.0.1', 51932)
b'dfasdfa'
Addr: ('127.0.0.1', 51934)
b'dfasfd'
Addr: ('127.0.0.1', 51936)
b'afdasdfas'
Addr: ('127.0.0.1', 51938)
b'fdasfda'
Addr: ('127.0.0.1', 51940)
b'dfa'
Addr: ('127.0.0.1', 51942)
b'fda'
Addr: ('127.0.0.1', 51944)
b'afasfda'
Addr: ('127.0.0.1', 51946)
b'afdasfd'
Addr: ('127.0.0.1', 51948)
b'afdasdfa'
Addr: ('127.0.0.1', 51950)

    可以看出,数据进行了多次的交互,并且接收了数据,是以字符编码形式进行接收的。

客户端
import socket

client = socket.socket()    #声明socket类型,同时生成socket连接对象
client.connect(("localhost",6969))

client.send("我要下载A片".encode("utf-8"))     #在python3中只能发送字节
data = client.recv(1
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python测试框架nose 下一篇Python零基础学习系列之二--Pytho..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目