소켓(Socket)의 원래 영어 의미는 "구멍" 또는 "소켓"입니다. BSD UNIX의 프로세스 통신 메커니즘으로 일반적으로 "소켓"이라고도 하며 IP 주소와 포트를 설명하는 데 사용됩니다. 통신 체인의 핸들이며 서로 다른 가상 머신 또는 서로 다른 컴퓨터 간의 통신을 구현하는 데 사용할 수 있습니다. .
네트워크상의 두 프로그램은 양방향 통신 연결을 통해 데이터를 교환합니다. 이 연결의 한쪽 끝을 소켓이라고 합니다.
네트워크 통신 연결을 설정하려면 최소한 한 쌍의 포트 번호(소켓)가 필요합니다. 소켓은 본질적으로 TCP/IP를 캡슐화하는 프로그래밍 인터페이스(API)입니다. TCP/IP는 프로그래머가 네트워크 개발에 사용할 수 있는 인터페이스도 제공합니다. HTTP는 캡슐화하거나 표시하는 방법을 제공하는 자동차입니다. 데이터 특정 형식, 소켓은 네트워크 통신 기능을 제공하는 엔진입니다.
파이썬의 소켓에 대해 이야기해보겠습니다.
1.socket 모듈
소켓을 생성하려면 소켓.socket() 함수를 사용하세요. 구문은 다음과 같습니다:
socket.socket(socket_family,socket_type,protocol=0)
socket_family는 다음 매개변수일 수 있습니다.
socket.AF_INET IPv4(기본값)
socket.AF_INET6 IPv6
socket.AF_UNIX만 사용할 수 있습니다. 단일 Unix 시스템에서 프로세스 간 통신
socket_type은 다음 매개변수일 수 있습니다.
소켓.SOCK_STREAM 스트리밍 소켓, TCP용(기본값)
소켓.SOCK_DGRAM 데이터그램 소켓, UDP용
소켓.SOCK_RAW 원시 소켓, 일반 소켓은 ICMP, IGMP 및 다른 네트워크 메시지는 가능하지만 SOCK_RAW는 또한 특수 IPv4 메시지도 처리할 수 있습니다. 또한 원시 소켓을 사용하면 IP_HDRINCL 소켓 옵션을 통해 IP 헤더를 구성할 수 있습니다.
Socket.SOCK_RDM은 신뢰할 수 있는 UDP 형식으로 데이터그램 전달을 보장하지만 순서를 보장하지는 않습니다. SOCK_RAM은 원래 프로토콜에 대한 낮은 수준의 액세스를 제공하는 데 사용되며 ICMP 메시지 전송과 같은 특정 특수 작업을 수행해야 할 때 사용됩니다. SOCK_RAM은 일반적으로 고급 사용자나 관리자가 실행하는 프로그램으로 제한됩니다.
socket.SOCK_SEQPACKET 안정적인 연속 패킷 서비스
프로토콜 매개변수:
0 (기본값) 특정 주소 패밀리와 연관된 프로토콜입니다. 0인 경우 시스템은 주소 형식 및 소켓 카테고리에 따라 자동으로 적절한 프로토콜을 선택합니다.
2. -in 메소드
서버 측 소켓 기능
s.bind() 바인딩 주소(ip 주소, 포트) )을 소켓에 연결하려면 매개변수가 튜플 형식이어야 합니다. 예: s.bind(('127.0.0.1',8009))
s.listen( 5) 듣기 시작, 5는 보류 중인 최대 연결 수입니다
s.accept() 클라이언트 연결을 수동적으로 수락하고 연결을 차단하고 대기합니다
클라이언트 소켓 기능
s.connect() 서버에 연결하려면 매개변수가 튜플 형식이어야 합니다. 예: s. connect(('127,0.0.1',8009))
공용 소켓 기능
s .recv(1024) TCP 데이터 수신, 1024는 데이터 수신 1회 크기
s.send(bytes) TCP 데이터 송신, python3 데이터 송신 형식이어야 함 바이트 형식
s.sendall() 데이터를 완전히 전송하고 내부 루프 호출은 send
s를 호출합니다. .close () 소켓 닫기
예제 1. 소켓 프로그램의 간단한 구현
서버측
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socket import time IP_PORT = ('127.0.0.1',8009) BUF_SIZE = 1024 tcp_server = socket.socket() tcp_server.bind(IP_PORT) tcp_server.listen(5) while True: print("waiting for connection...") conn,addr = tcp_server.accept() print("...connected from:",addr) while True: data = tcp_server.recv(BUF_SIZE) if not data:break tcp_server.send('[%s] %s'%(time.ctime(),data)) tcp_server.close()
위 코드 설명:
1~4행
첫 번째 줄은 Unix 시작 정보 줄, 그 다음 시간 모듈과 소켓 모듈을 가져옵니다.
5~10줄
IP_PORT는 전역 변수입니다. IP 주소와 포트가 선언되어 바인딩() 함수가 이 주소에 바인딩되어 있으며 버퍼 크기가 1K로 설정되어 있습니다. Listen() 함수는 허용되는 최대 연결 수를 나타냅니다.
11~마지막 줄로 이동
이후 서버 루프에 들어가서 연결이 도착할 때까지 수동적으로 기다립니다. 연결이 되면 대화 루프에 들어가 클라이언트가 데이터를 보낼 때까지 기다립니다. 메시지가 비어 있으면 클라이언트가 종료되었음을 의미하며 루프에서 벗어나 다음 연결이 도착할 때까지 기다립니다. 클라이언트 메시지를 받은 후 메시지 앞에 타임스탬프를 추가하고 반환합니다. 루프가 종료되지 않아 서버가 close()를 실행하지 않으므로 마지막 줄은 실행되지 않습니다. close() 함수를 호출하는 것을 잊지 마세요.
클라이언트
#!/usr/bin/env python
# _*_ coding:utf-8 _*_ import socket HOST = '127.0.0.1' PORT = 8009 BUF_SIZE = 1024 ADDR = (HOST,PORT) client = socket.socket() client.connect(ADDR) while True: data = input(">>> ") if not data:break client.send(bytes(data,encoding='utf-8')) recv_data = client.recv(BUF_SIZE) if not recv_data:break print(recv_data.decode()) client.close()
5~11行
HOST和PORT变量表示服务器的IP地址与端口号。由于演示是在同一台服务器所以IP地址都是127.0.0.1,如果运行在其他服务器上要做相应的修改。端口号要与服务器端完全相同否则无法通信。缓冲区大小还是1K。
客户端套接字在10行创建然后就去连接服务器端
13~21行
客户端也无限循环,客户端的循环在以下两个条件的任意一个发生后就退出:1.用户输入为空的情况或者服务器端响应的消息为空。否则客户端会把用户输入的字符串发送给服务器进行处理,然后接收显示服务器返回来的带有时间戳的字符串。
运行客户端程序与服务端程序
以下是客户端的输入与输出
[root@pythontab]# python client.py >>> hello python [Thu Sep 15 22:29:12 2016] b'hello python'
以下是服务端输出
[root@pythontab]# python server.py waiting for connection... ...connected from: ('127.0.0.1', 55378)
3.socketserver模块
socketserver是标准库中的一个高级别的模块。用于简化实现网络客户端与服务器所需要的大量样板代码。模块中已经实现了一些可以使用的类。
实例1:使用socketserver实现与上面socket()实例一样的功能
服务端程序代码
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socketserver import time HOST = '127.0.0.1' PORT = 8009 ADDR = (HOST,PORT) BUF_SIZE = 1024 class Myserver(socketserver.BaseRequestHandler): def handle(self): while True: print("...connected from:",self.client_address) data = self.request.recv(BUF_SIZE) if not data:break self.request.send(bytes("%s %s"%(time.ctime(),data))) server = socketserver.ThreadingTCPServer(ADDR,Myserver) print("waiting for connection...") server.serve_forever()
11~17行
主要的工作在这里。从socketserver的BaseRequestHandler类中派生出一个子类,并重写handle()函数。
在有客户端发进来的消息的时候,handle()函数就会被调用。
19~21行
代码的最后一部分用给定的IP地址和端口加上自定义处理请求的类(Myserver)。然后进入等待客户端请求与处理客户端请求的无限循环中。
客户端程序代码
import socket HOST = '127.0.0.1' PORT = 8009 ADDR = (HOST,PORT) BUF_SIZE = 1024 client = socket.socket() client.connect(ADDR) while True: data = input(">>> ") if not data:continue client.send(bytes(data,encoding='utf-8')) recv_data = client.recv(BUF_SIZE) if not recv_data:break print(recv_data.decode()) client.close()
执行服务端和客户端代码
下面是客户端输出
[root@pythontab]# python socketclient.py >>> hello python Thu Sep 15 23:53:31 2016 b'hello python' >>> hello pythontab Thu Sep 15 23:53:49 2016 b'hello pythontab'
下面是服务端输出
[root@pythontab]# python socketserver.py waiting for connection... ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385)

Python은 배우고 사용하기 쉽고 C는 더 강력하지만 복잡합니다. 1. Python Syntax는 간결하며 초보자에게 적합합니다. 동적 타이핑 및 자동 메모리 관리를 사용하면 사용하기 쉽지만 런타임 오류가 발생할 수 있습니다. 2.C는 고성능 응용 프로그램에 적합한 저수준 제어 및 고급 기능을 제공하지만 학습 임계 값이 높고 수동 메모리 및 유형 안전 관리가 필요합니다.

Python과 C는 메모리 관리 및 제어에 상당한 차이가 있습니다. 1. Python은 참조 계산 및 쓰레기 수집을 기반으로 자동 메모리 관리를 사용하여 프로그래머의 작업을 단순화합니다. 2.C는 메모리 수동 관리가 필요하므로 더 많은 제어를 제공하지만 복잡성과 오류 위험을 증가시킵니다. 선택할 언어는 프로젝트 요구 사항 및 팀 기술 스택을 기반으로해야합니다.

과학 컴퓨팅에서 Python의 응용 프로그램에는 데이터 분석, 머신 러닝, 수치 시뮬레이션 및 시각화가 포함됩니다. 1.numpy는 효율적인 다차원 배열 및 수학적 함수를 제공합니다. 2. Scipy는 Numpy 기능을 확장하고 최적화 및 선형 대수 도구를 제공합니다. 3. 팬더는 데이터 처리 및 분석에 사용됩니다. 4. matplotlib는 다양한 그래프와 시각적 결과를 생성하는 데 사용됩니다.

Python 또는 C를 선택할 것인지 프로젝트 요구 사항에 따라 다릅니다. 1) Python은 간결한 구문 및 풍부한 라이브러리로 인해 빠른 개발, 데이터 과학 및 스크립팅에 적합합니다. 2) C는 컴파일 및 수동 메모리 관리로 인해 시스템 프로그래밍 및 게임 개발과 같은 고성능 및 기본 제어가 필요한 시나리오에 적합합니다.

Python은 데이터 과학 및 기계 학습에 널리 사용되며 주로 단순성과 강력한 라이브러리 생태계에 의존합니다. 1) 팬더는 데이터 처리 및 분석에 사용되며, 2) Numpy는 효율적인 수치 계산을 제공하며 3) Scikit-Learn은 기계 학습 모델 구성 및 최적화에 사용되며 이러한 라이브러리는 Python을 데이터 과학 및 기계 학습에 이상적인 도구로 만듭니다.

하루에 2 시간 동안 파이썬을 배우는 것으로 충분합니까? 목표와 학습 방법에 따라 다릅니다. 1) 명확한 학습 계획을 개발, 2) 적절한 학습 자원 및 방법을 선택하고 3) 실습 연습 및 검토 및 통합 연습 및 검토 및 통합,이 기간 동안 Python의 기본 지식과 고급 기능을 점차적으로 마스터 할 수 있습니다.

웹 개발에서 Python의 주요 응용 프로그램에는 Django 및 Flask 프레임 워크 사용, API 개발, 데이터 분석 및 시각화, 머신 러닝 및 AI 및 성능 최적화가 포함됩니다. 1. Django 및 Flask 프레임 워크 : Django는 복잡한 응용 분야의 빠른 개발에 적합하며 플라스크는 소형 또는 고도로 맞춤형 프로젝트에 적합합니다. 2. API 개발 : Flask 또는 DjangorestFramework를 사용하여 RESTFULAPI를 구축하십시오. 3. 데이터 분석 및 시각화 : Python을 사용하여 데이터를 처리하고 웹 인터페이스를 통해 표시합니다. 4. 머신 러닝 및 AI : 파이썬은 지능형 웹 애플리케이션을 구축하는 데 사용됩니다. 5. 성능 최적화 : 비동기 프로그래밍, 캐싱 및 코드를 통해 최적화

Python은 개발 효율에서 C보다 낫지 만 C는 실행 성능이 높습니다. 1. Python의 간결한 구문 및 풍부한 라이브러리는 개발 효율성을 향상시킵니다. 2.C의 컴파일 유형 특성 및 하드웨어 제어는 실행 성능을 향상시킵니다. 선택할 때는 프로젝트 요구에 따라 개발 속도 및 실행 효율성을 평가해야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
