python 基础(十五) socket编程

SOCKET

TCP协议:

有请求 有响应 称之为 tcp协议

是面向连接的协议 就是在收发数据之前 必须先要建立一个可靠的链接 三次握手

如:网站

UDP协议:

是一个非链接的协议 传输之前不需要键连接

如:qq,飞秋

 

socket概念:

Socket又称套接字 向网络发出请求 或者应答网络请求 可以实现在一台计算机上不同的进程进行通信

 

二、socket使用

import socket
socket.socket(family,type)

参数:

  • family: AF_UNIX或者是AF_INET

    AF_INET 使用的IPV4

    AF_UNIX 不走网络层的 也不需要进行数据的解密 使用于传输大量数据

  • type:

    SOCKET_STREAM (TCP链接)

    SOCKET_DGRAM (UDP链接)

三、创建udp的客户端和服务端

(1) 服务端

实例

import socket
udpServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #第一个为ipv4 第二个选择udp
udpServer.bind(("127.0.0.1",8868)) #绑定IP 和端口号 让别人通过这个地址和端口号请求到当前的服务
data,addr = udpServer.recvfrom(1024) #接收发送过来的数据 最大1kb 返回数据和对方的地址 
print("客户端发送的消息的内容为{} 地址为{}".format(data,addr))
#在运行以后会阻塞 等待对方的请求
 

(2) 客户端

实例

import socket
udpClient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
    data = input('请输入内容')
    udpClient.sendto(data.encode('utf-8'),("127.0.0.1",8868))
 

 

四、TCP服务端和客户端

(1) 服务端

实例

import socket
#TCP
tcpServer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpServer.bind(("127.0.0.1",8878))
tcpServer.listen(5) #超过5人链接服务端  后面的人排队 阻塞
clientSock,addr = tcpServer.accept() #当前等待链接 阻塞模式
while True:
    data = clientSock.recv(1024) #接收客户端的数据
    print('接收客户端的信息为{}'.format(data.decode('utf-8')))
    serverData = input("请输入回复信息")
    clientSock.send(serverData.encode('utf-8')) #回复客户端的数据
 

(2) 客户端

import socket
tcpClient = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpClient.connect(("127.0.0.1",8878)) #链接tcp服务端
while True:
    data = input("请输入写给服务端的内容")
    tcpClient.send(data.encode('utf-8')) #客户端给服务端发送数据
    serverData = tcpClient.recv(1024) #接收服务端传递过来的数据
    print("对方回复的消息为:",serverData.decode('utf-8')) #显示数据

五、通过socket请求网址

实例

import socket
#建立TCP协议
# print(socket.gethostbyname('www.baidu.com')) #通过域名获取 IP地址
tcpClient = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#建立链接
tcpClient.connect(('www.id97.com',80))
tcpClient.send(b'GET / HTTP/1.1\r\nHost: www.id97.com\r\nConnection: close\r\n\r\n')
dataList = []
while True:
    data = tcpClient.recv(1024)
    if not data:
        break
    dataList.append(data)
f = open('id97com.html','wb')
f.writelines(dataList)
f.close()
 

 

转载于:https://www.cnblogs.com/gugubeng/p/9715656.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python基于TCP的Socket编程是一种网络编程技术,它使用TCP协议来实现网络通信。通过PythonSocket模块,我们可以创建一个TCP服务器或客户端,实现数据的传输和接收。在这种编程模式下,服务器和客户端之间通过套接字(socket)建立连接,然后通过发送和接收数据来进行通信。Python基于TCP的Socket编程可以用于各种网络应用程序,如Web服务器、邮件服务器、聊天室等。 ### 回答2: Python基于TCP的socket编程是一种实现网络通信的方式。通过使用Python中的socket模块,可以创建一个Socket对象,并将其与本地主机上的IP地址和端口号绑定,以实现网络接口的监听。在此之后,该Socket对象接受网络数据包请求,并将其作为一组字节发送到特定的网络地址上。无论是服务器还是客户端,都可以使用此方法建立连接并发送数据。 Python中的TCP socket编程需要双方进行协议的定义,包括请求协议、响应协议和数据传输协议。这些协议可以自定义,也可以使用标准的TCP/IP协议。 在编写socket程序时,可以根据需要选择阻塞或非阻塞模式。如果使用阻塞模式,程序将等待其他Socket对象的响应,然后才能继续执行下去;如果使用非阻塞模式,程序将立即返回,并且在未收到响应时将执行其他操作。 Python TCP socket编程的一个重要方面是如何处理异常情况。在网络通信中,可能发生各种各样的异常,例如连接断开、数据损坏等。对于这些异常,程序应该对其进行处理,以便能够及时诊断和修复错误。 Python TCP socket编程还可以与其他网络通信技术结合使用,例如HTTP、FTP等。通过这种方式,可以实现更复杂的网络应用程序,例如Web服务器、FTP服务器等。 在Python TCP socket编程中,需要使用一些Python语言的特性,例如面向对象编程、异常处理、多线程等。掌握这些技巧,可以使程序更加稳定、高效、安全,并且易于调试和维护。 ### 回答3: Python可以通过TCP协议实现基于Socket的网络通信。Socket是一种网络通信协议,它可以通过Internet或本地网络实现不同计算机之间的通信。Socket包括两个物理端口,一个用于发送数据,另一个用于接收数据。 Python使用socket模块来实现网络编程。在基于TCP的Socket编程中,需要使用socket对象来创建客户端和服务器,其中客户端使用connect()函数与服务器进行连接,而服务器端使用bind()和listen()函数进行绑定和监听。服务器在接收到客户端连接请求之后,使用accept()函数接受请求并返回一个新的Socket对象,该对象用于与客户端进行通信。 Python中通过Socket模块的一些常见方法进行socket编程,例如: 1. socket.socket(): 创建一个新的socket对象。 2. socket.bind(address): 绑定IP地址和端口号,创建一个服务器。 3. socket.listen(backlog): 开始监听,并设置最大连接数。 4. socket.accept(): 接受客户端的连接请求,并返回新的socket对象。 5. socket.connect(address): 连接到服务器。 6. socket.send(data): 向socket发送数据。 7. socket.recv(buffer_size): 从socket接收数据。 8. socket.close(): 关闭socket连接。 使用Python实现socket编程时需要注意: 1. 使用TCP协议时需要先连接服务器,然后再发送或接收数据。 2. 在服务器端,需要在while循环中不断接收客户端的请求,并对请求进行处理。 3. 在客户端与服务器连接之后,需要及时关闭socket连接,避免资源浪费。 以上是Python基于TCP的Socket编程的基本方法和注意事项。通过socket编程,可以实现网络通信等功能,广泛应用于客户端与服务器之间的通信、文件传输、远程控制等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值