qq端口号:python-socket重难点记录

文章目录

  • 1、windows 系统下如何查看当前的ip地址
  • 2、qq消息为啥不会传到微信里面?端口号问题
  • 3、 什么是端口(重点呐)
  • 4、创建socket(python版)
  • 5、发送与接受数据
  • 6、公有ip和私有ip
  • 7、单工、半双工、全双工
  • 8、TCP客户端和服务器的建立
    • TCP客户端(需要先运行服务器,才可以运行客户端,此外需要修改自己为自己的电脑ip)
    • TCP服务器

1、windows 系统下如何查看当前的ip地址

打开终端(win+r)输入下面命令行

#写在前面:该页面ctrl+F可以查询内容,便于定位到你所需要知道的知识。ipconfig

在公司时候输入ipconfig (在公司网络下你的电脑ip是固定的,每天你ipconfig一下都不会变)


个人的热点链接电脑,输入ipconfig

各部分的解释:

本地链接的IPv6:当前电脑的ip或者手机的热点ip
IPv4地址:当前电脑的ip或者手机的热点ip
子网掩码:
默认网关:网关又称网关路由器。比如我们要发送消息给翠花,消息会先经过自己家的路由器A,再由自己家的路由器A将消息发给翠花家路由器B,最后翠花家路由器B把消息传送给翠花。网关的作用类似一个通关口

2、qq消息为啥不会传到微信里面?端口号问题

电脑有自己的ip,电脑上的软件有特定的端口号,qq有qq端口号,微信有微信端口号。所以传递的消息上也是有软件端口号信息的。下面两张图片引用了b站的python-socket教程。https://www.bilibili.com/video/BV1Xx411R743/?p=5&spm_id_from=pageDriver&vd_source=f99e21db912f182fe051b1b6b156e0e3

左边机器向右边机器发送消息


右边机器向左边回复消息

3、 什么是端口(重点呐)

一个程序没有运行之前称为:程序。
一个程序运行起来之后称为:进程,并用端口号标记该程序

端口号0-1023用于特定用途(类似于手机号码很多,但是110,120,119用于特定用途的),1024-65535端口号为动态端口,我们可以自由使用。

4、创建socket(python版)

Socket函数使用的格式为:socket(family,type[,protocol])

参数功能
familysocket.AF_INET 表示服务器之间网络通信
typesocket.SOCK_STREAM,当使用TCP时选择此参数
typesocket.SOCK_DGRAM ,当使用UDP时选择此参数
import socket# 创建tcp的套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 不用时关闭s.close()# 创建udp的套接字s1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 不用时关闭s1.close()

5、发送与接受数据

注意:
1、如果未能绑定端口则操作系统会随机分配一个端口。如果应用需要接收并发送消息则需要给程序绑定特定的端口。
2、同一个电脑的两个应用程序不可以绑定同一个端口号。
3、windows通讯用gbk编码,与mac和liux通讯用utf-8编码

'''发送数据'''import socketdef main(): # 1、创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2、绑定一个本地信息 localaddr = ("", 7790) udp_socket.bind(localaddr) # 必须绑定自己电脑的ip以及port,其他的不行 # 3、接收数据 recv_data存储一个元组(接收到的数据,(发送方的ip和port端口号)) while True: # 1、从键盘中获取数据 send_data = input("请输入要发送的数据:") udp_socket.sendto(send_data.encode("gbk"), ("192.168.40.137", 7788)) # 5、关闭套接字 udp_socket.close()if __name__ == "__main__": main()

程序运行并输入111回车

'''接受数据'''import socketdef main(): # 1、创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2、绑定一个本地信息 localaddr = ("", 7788) udp_socket.bind(localaddr) # 必须绑定自己电脑的ip以及port,其他的不行 # 3、接收数据 recv_data存储一个元组(接收到的数据,(发送方的ip和port端口号)) while True: recv_data = udp_socket.recvfrom(1024) recv_mes = recv_data[0] # 存储接收的数据 send_addr = recv_data[1] # 存储方的地址信息 # 4、打印接收到的数据 # print("%s:%s" % (str(send_addr), recv_mes.decode("utf-8"))) # 接收来自windows的编码内容:windows默认采用gbk编码,因此需要用gbk解码, print("%s:%s" % (str(send_addr), recv_mes.decode("gbk"))) # 5、关闭套接字 udp_socket.close()if __name__ == "__main__": main()

接收端会收到信息111并且显示电脑ip和端口号。

6、公有ip和私有ip

为什么你在学校实验或者在项目现场看到的IP都是192.168.1.1-192.168.255.255这个范围内部呢。因为这个ip区间是私有ip,是不直接上互联网的,无法和世界互联。只有和世界互联的ip才是唯一的独有的ip。

7、单工、半双工、全双工

单工:只可以发送或者接收消息,比如收音机
半双工:可以接收也可以发送消息,但是同一时刻只能接收或发送。
全双工:同一时刻既可以发消息也可以接收消息。socket套接字是全双工的。

8、TCP客户端和服务器的建立

tcp通讯包括三个部分:建立链接、发送消息、终止链接。
(比如在打电话时候,拨打出去并不会立马接通,因为需要先建立链接,所以tcp通讯传输数据更加稳定,不容易丢包。)
可靠传输:tcp采用发送应答机制、超时重传、错误校验、流量控制和阻塞管理

一个tcp的套接字可以转化为一个监听套接字,专门用于监听客户端的接入。

TCP客户端(需要先运行服务器,才可以运行客户端,此外需要修改自己为自己的电脑ip)

'''TCP客户端 '''import socketdef main(): # 1.创建tcp的套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.链接服务器 tcp_socket.connect(("192.168.40.137", 7890)) # 3.发送数据、接收数据 while True: send_data = input("请输入要发送的数据:") tcp_socket.send(send_data.encode("gbk")) # 4.关闭套接字 tcp_socket.close()if __name__=="__main__": main()

TCP服务器

'''TCP服务器'''import socketdef main(): # 1.买个手机(创建套接字 socket) tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.传入手机卡(绑定本地信息 bind) tcp_server_socket.bind(("", 7890)) # 3.将手机设置为正常的 响铃模式(让默认的套接字由主动变为被动listen) tcp_server_socket.listen(128) print("等待一个新的客户端到来。。。。") # 4.等待别人的电话到来(等待客户端的链接 accpet) # new_client_socket 负责和客户端通讯 new_client_socket, clientAddr = tcp_server_socket.accept() # 卡住 等待客户端连接。 print("一个新的客户端已经到来%s"% str(clientAddr)) # 接收客户端发送过来的请求 while True: recv_data = new_client_socket.recv(1024) # 卡住等待客户端输入。实时通讯依赖于recv_data。recv_data相当于信鸽 print("客户端发送过来的请求是:%s" % recv_data.decode("gbk")) print("客户端连接断开") if recv_data: new_client_socket.send("shoudao".encode("gbk")) else: new_client_socket.close()if __name__ == "__main__": main()

慢慢学习中,持续更新中>>>>

相关推荐

相关文章