[programmation réseau] développement d'applications réseau TCP

Zsyl 2021-11-25 17:48:42
programmation seau veloppement applications seau

TCP Processus de développement d'applications web

1. TCP Introduction au processus de développement d'applications web

TCP Le développement d'applications Web est divisé en:

  • TCP Développement de programmes clients
  • TCP Développement de programmes côté serveur

Dis - le. Ming:

Un programme client est un programme qui fonctionne sur Programmes sur les appareils utilisateurs Un programme côté serveur est un programme qui fonctionne sur Programmes sur l'appareil serveur,Services de données dédiés aux clients.

2. TCP .Introduction au processus de développement du programme client

Insérer la description de l'image ici

Description des étapes:

  1. Créer un objet de socket client
  2. Connexion à la socket du serveur
  3. Envoyer des données
  4. Réception des données
  5. Fermer la prise du client

3. TCP Introduction au processus de développement du serveur

Insérer la description de l'image ici

Description des étapes:

  1. Créer un objet socket côté serveur
  2. Numéro de port de liaison
  3. Configuration de l'écoute
  4. En attendant d'accepter la demande de connexion du client
  5. Réception des données
  6. Envoyer des données
  7. Fermez la prise

4. Résumé

  1. TCP Le développement d'applications Web est divisé en Développement de programmes clientsEt Développement de programmes côté serveur.
  2. Initier activement une demande de connexion C'est un programme client
  3. En attente d'une demande de connexion C'est le serveur、

TCP Développement de programmes clients

Objectifs d'apprentissage

  • Capable d'écrire TCP Application client envoyer et recevoir des messages

1. Développement TCP Examen des étapes de développement du programme client

  1. Créer un objet de socket client
  2. Connexion à la socket du serveur
  3. Envoyer des données
  4. Réception des données
  5. Fermer la prise du client

2. socket Introduction à la classe

Importer socket Module import socket

Créer un client socket Objet socket.socket(AddressFamily, Type)

Description des paramètres:

  • AddressFamily ReprésentationIPType d'adresse, Divisé enTPv4EtIPv6
  • Type Indique le type de Protocole de transport

Description de la méthode:

  • connect((host, port)) Indique qu'une connexion est établie avec une socket côté serveur , hostC'est un serveur.ipAdresse,port Est le numéro de port de l'application
  • send(data) Indique l'envoi des données ,dataC'est des données binaires
  • recv(buffersize) Indique la réception des données , buffersize Est la longueur des données reçues à chaque fois

3. TCP Exemple de code pour le développement du programme client

import socket
if __name__ == '__main__':
# CréationtcpSocket client
# 1. AF_INET:Représentationipv4
# 2. SOCK_STREAM: tcpProtocole de transmission
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connexion à l'application serveur 
tcp_client_socket.connect(("192.168.131.62", 8080))
# Code exécuté ici , Description la connexion a été établie avec succès 
# Données à envoyer
send_data = " Bonjour serveur , Je suis le client little black !".encode("gbk")
# Envoyer des données
tcp_client_socket.send(send_data)
# Réception des données, Le nombre maximum d'octets de données reçus cette fois est 1024
recv_data = tcp_client_socket.recv(1024)
# Renvoie directement les données binaires envoyées par le serveur 
print(recv_data)
# Décoder les données
recv_content = recv_data.decode("gbk")
print(" Les données du serveur de réception sont :", recv_content)
# Fermez la prise
tcp_client_socket.close()

Résultats de la mise en œuvre:

b'hello'
Les données du serveur de réception sont : hello

Description

1. str.encode(Format de codage) Indique que la chaîne est encodée en binaire
2. data.decode(Format de codage) Représente le décodage binaire en chaîne

L'assistant de débogage réseau agit comme serveur :

Insérer la description de l'image ici

4. Résumé

  1. ImportersocketModule

  2. CréationTCPSocket’socket’

    • Paramètres1: ‘AF_INET’, ReprésentationIPv4Type d'adresse
    • Paramètres2: ‘SOCK_STREAM’, ReprésentationTCPType de Protocole de transport
  3. Envoyer des données’send’

    • Paramètres1: Données binaires à envoyer , Attention!: La chaîne doit être utiliséeencode()Méthode de codage
  4. Réception des données’recv’

    • Paramètres1: Indique la taille des données reçues à chaque fois ,En octets
  5. Fermez la prise’socket’ Indique que la communication est terminée

TCPDéveloppement de programmes côté serveur

Objectifs d'apprentissage

  • Capable d'écrireTCP L'application serveur reçoit et envoie des messages

1. Développement TCP Examen des étapes de développement du serveur

  1. Créer un objet socket côté serveur
  2. Numéro de port de liaison
  3. Configuration de l'écoute
  4. En attendant d'accepter la demande de connexion du client
  5. Réception des données
  6. Envoyer des données
  7. Fermez la prise

2. socket Introduction à la classe

Importer socket Module:
import socket

Créer un serveur socket Objet :
socket.socket(AddressFamily, Type)

Description des paramètres:

  • AddressFamily ReprésentationIPType d'adresse, Divisé enTPv4EtIPv6
  • Type Indique le type de Protocole de transport

Description de la méthode:

  • bind((host, port)) Indique le numéro de port de liaison , host - Oui. ip Adresse,port Est le numéro de port,ip Les adresses ne sont généralement pas spécifiées , Représente l'un ou l'autre des ip Toutes les adresses sont OK. .
  • listen (backlog) Indique la configuration de l'écoute ,backlog Le paramètre indique le nombre maximum de connexions en attente .
  • accept() Indique qu'une demande de connexion d'un client est en attente d'acceptation
  • send(data) Indique l'envoi des données ,data C'est des données binaires
  • recv(buffersize) Indique la réception des données , buffersize Est la longueur des données reçues à chaque fois

3. TCP Exemple de code de développement du serveur

import socket
if __name__ == '__main__':
# CréationtcpSocket côté serveur
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Définir le multiplexage du numéro de port , Libérez immédiatement le numéro de port de sortie du programme 
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# Lier le numéro de port au programme 
tcp_server_socket.bind(("", 8989))
# Configuration de l'écoute
# 128: Nombre maximum de connexions en attente , Conseils: Il s'agit actuellement d'un serveur monotâche , Un seul client peut être desservi en même temps , L'utilisation ultérieure de tâches multiples permet au serveur de servir simultanément plusieurs clients ,
# Le client n'a pas besoin d'attendre l'établissement de la connexion 
# listen Cette dernière socket ne reçoit que les demandes de connexion des clients ,Impossible d'envoyer et de recevoir des messages, Envoyer et recevoir des messages en utilisant la nouvelle socket retournée 
tcp_server_socket.listen(128)
# En attente d'une demande de connexion du client , Seul le Code de succès de la connexion client - serveur peut débloquer , Pour que le code continue 
# 1. Socket dédié à la communication avec le client : service_client_socket
# 2. ClientipAdresse et numéro de port: ip_port
service_client_socket, ip_port = tcp_server_socket.accept()
# L'exécution du Code indique que la connexion a été établie avec succès 
print("ClientipAdresse et numéro de port:", ip_port)
# Recevoir les données envoyées par le client , Le nombre maximum d'octets de données reçues cette fois est 1024
recv_data = service_client_socket.recv(1024)
# Obtenir la longueur des données 
recv_data_length = len(recv_data)
print("La longueur des données reçues est:", recv_data_length)
# Décoder les données binaires 
recv_content = recv_data.decode("gbk")
print("Les données reçues du client sont::", recv_content)
# Données à envoyer
send_data = "ok, Le problème est en cours ...".encode("gbk")
# Envoyer les données au client
service_client_socket.send(send_data)
# Fermer la prise du service au client , Services de terminaison des communications avec les clients 
service_client_socket.close()
# Fermez la prise du serveur , Terminaison et service client pour les demandes de connexion 
tcp_server_socket.close()

Résultats de la mise en œuvre:


ClientipAdresse et numéro de port: (‘172.16.47.209’, 52472)
La longueur des données reçues est: 5
Les données reçues du client sont:: hello

Description:

Lorsque le client et le serveur sont connectés , Le numéro de port n'est pas libéré immédiatement après la sortie du serveur , J'ai besoin d'attendre 1-2Minutes.

Il y a deux solutions:

  1. Changer le numéro de port du serveur
  2. Définir le multiplexage du numéro de port (Recommandé à tous), Cela signifie que le numéro de port est libéré immédiatement après la sortie du serveur. .

Le Code pour définir le multiplexage du numéro de port est le suivant :

# Paramètres1: Indique la prise courante 
# Paramètres2: Définir les options de multiplexage des numéros de port 
# Paramètres3: Définir la valeur pour l'option multiplexage du numéro de port 
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)


L'assistant de débogage réseau agit en tant que client :

Insérer la description de l'image ici

4. Résumé

  1. ImportersocketModule
  2. CréationTCPSocket’socket’
  • Paramètres1: ‘AF_INET’, ReprésentationIPv4Type d'adresse
  • Paramètres2: ‘SOCK_STREAM’, ReprésentationTCPType de Protocole de transport
  1. Numéro de port de liaison’bind’
  • Paramètres: Tuple, Par exemple,:(ipAdresse, Numéro de port)
  1. Configuration de l'écoute’listen’
  • Paramètres: Nombre maximum de connexions en attente
  1. En attendant d'accepter la demande de connexion du client ’accept’
  2. Envoyer des données’send’
  • Paramètres: Données binaires à envoyer , Attention!: La chaîne doit être utiliséeencode()Méthode de codage
  1. Réception des données’recv’
  • Paramètres: Indique la taille des données reçues à chaque fois ,En octets,Attention!: Décoder en chaîne pour utiliser decode()Méthodes
  1. Fermez la prise’socket’ Indique que la communication est terminée

Allez!

Merci beaucoup.!

Un effort.!

版权声明
本文为[Zsyl]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125174627520s.html

  1. La distribution Linux d'Amazon est maintenant entièrement basée sur Fedora
  2. org.springframework.web.bind.MissingServletRequestParameterException
  3. Built in constraints and functions of MySQL Foundation (2)
  4. Basic operation of MySQL Foundation (I)
  5. Introduction to Java zero foundation 3: Java data types
  6. 从零开始搭建EasyDarwin环境——Linux系统开发环境搭建Golang
  7. Redis source Concise Analysis 02 - SDS String
  8. Construire l'environnement easydarwin à partir de zéro - - construire l'environnement de développement du système Linux golang
  9. javaweb代码是正确的,但是第一行代码就报错了
  10. **** | Java | 后端开挂:3行代码写出8个接口
  11. Java || 看了大二学长写的代码,我竟开始默默的模仿了。。。
  12. Java | 手把手教你实现一个抽奖系统(Java版)
  13. Java | Manuel pour vous apprendre à mettre en œuvre un système de loterie (version Java)
  14. Java | | après avoir lu le Code que j'ai écrit en deuxième année, j'ai commencé à imiter silencieusement...
  15. Java | back - end Pending: 3 - line Code write 8 Interfaces
  16. Le Code Web Java est correct, mais la première ligne de code est incorrecte
  17. Android网络编程之Http通信
  18. Android網絡編程之Http通信
  19. Http communication for Android Network Programming
  20. 数据结构实验八 领会图的两种主要储存结构和图的基本运算算法设计
  21. Hibernate数据校验简介
  22. The story of spring
  23. Il a dépensé 270 000 yuans pour soulever Xiaopeng p7 et a parcouru 3 627 km. Le propriétaire du véhicule a partagé 6 avantages et inconvénients.
  24. 阿里蚂蚁花呗团队面试题:spring+分布式+jvm+session+redis
  25. 【Java入门100例】14.字符串排序——compareTo()
  26. 【Java入门100例】13.修改文件扩展名——字符串替换
  27. Leetcode 79. Word Search [C + + / java detailed problem]
  28. Introduction à la vérification des données hibernantes
  29. Expérience de la structure des données
  30. Spring cloud gateway practice 2: more routing configuration methods
  31. Java network programming - summary overview
  32. 基于语法树的 Java 代码自动化插桩
  33. 云原生 Spring Boot 应用配置 Prometheus + Grafana 监控(保姆级)
  34. Spring cloud gateway practice 2: more routing configuration methods
  35. Jenkins file one line of code to deploy. Net program to k8s
  36. Java network programming - summary overview
  37. Cloud Native Spring Boot application configuration Prometheus + grafana Monitoring (baby - sitter)
  38. Insertion automatique de code Java basée sur l'Arbre syntaxique
  39. Le SUV phare de Xiaopeng, Xiaopeng G9, a fait ses débuts au salon de l'automobile et s'est tenu en position C dans la nouvelle force?
  40. Docker 从入门到实践系列四 - Docker 容器编排利器 Docker Compose
  41. 6年老猿带你掌握Spring Boot实现定时任务的动态增删启停
  42. disruptor笔记之六:常见场景,java教程从入门到精通pdf百度云
  43. Pourquoi InnoDB n'utilise - t - il pas un cache LRU naïf?
  44. Java Reflection (2): quelques opérations de base de reflection
  45. 6年老猿帶你掌握Spring Boot實現定時任務的動態增删啟停
  46. Les singes âgés vous permettent de maîtriser le démarrage et l'arrêt dynamiques des tâches programmées par Spring boot
  47. Docker From Beginning to Practice Series IV - docker Container chorégraphe Clean docker Composition
  48. 编写 java 程序,为家用电脑 ipv6 自动更新 goddy dns 记录(ddns)
  49. java jvm-old gc耗时几十s,导致系统告警
  50. Disruptor note 6: scénario commun, tutoriel Java de l'introduction à la maîtrise du PDF Baidu Cloud
  51. 编写Java程序启动脚本最佳实践
  52. How to get the correct Linux user's documents, music videos and other directories?
  53. Java JVM Old GC prend des dizaines de s, ce qui provoque une alarme système
  54. Écrivez un programme Java pour mettre à jour automatiquement les enregistrements DNS goddy (ddns) pour l'ordinateur domestique IPv6
  55. 編寫Java程序啟動脚本最佳實踐
  56. Meilleures pratiques pour écrire des scripts de démarrage de programmes Java
  57. Notes sur springcloud Eureka
  58. Ajout, suppression et modification simples de mybatis
  59. Java - carte mémoire de l'objet
  60. Why did docker lose to kubernetes? Docker employee readme!