소켓 프로그래밍(Socket Program) TCP 간단한 채팅 프로그램(Python 코드 첨부)

11851 단어 작은 항목

설명


이번 실천은 다중 임무와 관련이 없고 단지 단일 라인에서 완성했기 때문에 클라이언트와 서버는 한 사람이 한마디 하는 상태에 속한다.클라이언트가 연결을 시작하고 성공한 후에 먼저 메시지를 보내고 클라이언트가 수신한 다음에 클라이언트가 다시 메시지를 보냅니다.즉 "한 사람이 한 번 말한다"는 상태에 속한다.후속 계약 도입 후에는 제한이 없으며, 이번에는 가장 간단한 TCP 통신 과정을 체험할 뿐이다.

통신 예


첫 번째 그룹(현재 연결을 닫은 후 서버가 계속 연결을 기다립니다)


클라이언트
- 연결 성공 - 본기 발송: Hi i'm client.Hi let's have a talk를 보냈습니다.이 컴퓨터 발송: Ok, what's your name?I'm the Server가 전송되었습니다.기본 발송:bye 발송됨
- 클라이언트가 닫힙니다.
서버
접속 대기--('192.168.43.65', 52934): Hi i'm client.서버 발송: Hi let's have a talk.발송됨 ('192.168.43.65', 52934): Ok, what's your name?서버 전송: I'm the Server.발송됨 ('192.168.43.65', 52934):bye----연결 종료--접속 대기--

두 번째 그룹(클라이언트 서버 닫기)


클라이언트
--연결 성공 --본기 발송:shut down 발송
- 클라이언트가 닫힙니다.
서버
접속 대기--('192.168.43.65', 52949):shutdown--서비스 종료

코드


주의하다
클라이언트와 서버 코드는 두 개의 서로 다른 IP 세그먼트에서 실행되어야 한다. 예를 들어 하나는 본 컴퓨터에서 실행되고, 둘은 가상 컴퓨터에서 실행되며, 클라이언트는 서버의 IP와 감청하는 포트를 설정해야 한다.
서버
수신 "bye" 시 현재 접속이 종료되고 수령 "shut down" 시 서버가 종료됩니다.
from socket import *


#  TCP 
tcpSocket = socket(AF_INET, SOCK_STREAM)
#  
localAddress = ('', 9000)
#  
tcpSocket.bind(localAddress)
#  
tcpSocket.listen(1)
#  
on = 1

#  
while True:
    try:
        print("—— ——")
        connect, clientAddress = tcpSocket.accept()

        while True:
            try:
                #  
                data = connect.recv(1024).decode()

                if (not data) or (data == "bye"):  #  "bye" 
                    connect.close()
                    print("{} : {}    ————     ".format(clientAddress, data))
                    break

                elif data == "shut down":  #  "shut down" 
                    tcpSocket.close()
                    on = 0
                    print("{} : {}    ————     ".format(clientAddress, data))
                    break

                else:
                    print("{} : {}".format(clientAddress, data))

                #  
                data = input("  : ")
                connect.send(data.encode())
                print(" ")

            except:
                connect.close()

        if on == 0:
            break

    except:
        tcpSocket.close()
        break

클라이언트8줄은 서버의 관련 주소와 연결된 감청 포트로 설정됩니다.
from socket import *


#  
tcpSocket = socket(AF_INET, SOCK_STREAM)

#  
aimAddress = ('192.168.43.175', 9000)

#  
tcpSocket.connect(aimAddress)
print("—— ——")

while True:
    try:
        #  
        data = input("  : ")
        #  
        tcpSocket.send(data.encode())
        print(" ")
        #  
        data = tcpSocket.recv(1024).decode()
        print(data)

        if not data:
            tcpSocket.close()
            print("—— ——")
            break
        elif data == "bye":
            tcpSocket.close()
            print("—— ——")

    except:
        tcpSocket.close()
        print("—— ——")
        break

좋은 웹페이지 즐겨찾기