Socket

一、什么是Socket:

Socket 又称“套接字”,应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

二、理解Socket:

我们写的网络编程,它是属于应用层的,当我们写好程序后,需要将数据发送给传输层,但是应用层和传输层通信是需要遵循相关的协议的,因此提供了Socket来代替传输层协议。Socket是应用层与TCP/IP协议族通信的中间软件抽象层

三、socket()函数:

Python中,我们用 socket() 来创建套接字,语法如下

socket.socket(family = AF_INET [,type = SOCK_STREAM])

family

套接字家族有AF_INET或者AF_UNIX

type

套接字类型有面向连接和非连接SOCK_STREAM和SOCK_DGRAM

四、基于UDP的Socket使用:

server:

import socket
# 创建一个服务器 socket 对象
server = socket.socket(type= socket.SOCK_DGRAM)
#绑定套接字
ip_port = ("127.0.0.1",8080)
server.bind(ip_port)
while True:
#接受客户端的消息
    msg,addr =server.recvfrom(1024)
    msg = msg.decode("UTF-8")
    print("client>>>:{}".format(msg))
    #回复客户端
    content = input("请输入你回复的消息:")
    content = content.encode("UTF-8")
    server.sendto(content,addr)
    #关闭服务器套接字
server.close()

client:

import socket
#创建一个对象
client = socket.socket(type=socket.SOCK_DGRAM)
#给服务器发消息
ip_port = ("127.0.0.1",8080)
while True:
    content = input("请输入你的聊天内容:")
    #以UTF-8对content进行编码,获取二进制的类型对象,encode进行编码
    content = content.encode("UTF-8")
    #向服务器发一条消息,client.sendto 发送UDP数据,将数据发送到套接字address形式是(ip地址,port)的元组,指定的远程地址
    client.sendto(content,ip_port)
    #接受服务器消息
    #接受的是从服务器返回的消息,client.recvfrom()接受的UDP数据,但返回的是(data,address),data是包含接收数据的字符串
    msg,addr = client.recvfrom(1024)
    msg = msg.decode("UTF-8")

    #打印消息
    print("server>>>:".format(msg))
    #关闭套接字
client.close()
五、基于TCP的Socket使用:

TCP_server:

import socket

# 创建一个服务器套接字
TCP_server = socket.socket(type=socket.SOCK_STREAM)
# 绑定端口
ip_port = ("127.0.0.1",8080![在这里插入图片描述](https://img-blog.csdnimg.cn/20200103181202683.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzAwODIw,size_16,color_FFFFFF,t_70))
TCP_server.bind(ip_port)
TCP_server.listen(5)
print("等待连接中>>>")
    # 将socket创建的套接字编程被动型,等待客户连接请求。
    # 让服务器阻塞,等待客户端的连接
client_socket,client_addr = TCP_server.accept()
print("{}已连接".format(client_addr))
while True:
    # 接收客户端发来的消息
    recv_msg = client_socket.recv(1024)#接收1024个字节
    recv_msg = recv_msg.decode("UTF-8")
    #打印客户端信息
    print(">>>TCP_client:{}".format(recv_msg))
    #发给客户端
    msg = input("给客户端发的消息:")
    msg = msg.encode("UTF-8")
    client_socket.send(msg)

    #关闭套接字
client_socket.close()
tcp_server.close()

TCP_client:

import socket
#1、创建客户端的套接字
TCP_client = socket.socket(type=socket.SOCK_STREAM)
#2、连接服务器端口
ip_port = ("127.0.0.1",8080)#服务器的ip和端口
TCP_client.connect(ip_port)
#3、给服务器发消息
while True:
    msg = input("发消息给服务器:")
    msg = msg.encode("UTF-8")
    TCP_client.send(msg)
    #4、接收服务器的消息
    recv_msg = TCP_client.recv(1024)
    recv_msg = recv_msg.decode("UTF-8")
    #5、打印返回的消息
    print(">>>TCP_server:{}".format(recv_msg))
    #6、关闭套接字
TCP_client.close()

socket能存在redis中吗 socket.socket()有什么用_网络通信


愿时光能缓,愿故人不散;愿你惦记的人能和你道晚安,愿你独闯的日子不再孤单。加油!