초식 Socket 프로그래밍 - 유동식 플러그인 기반의 다중 스레드 병발 서버 리셋 프로그램 설계
12969 단어 컴퓨터 네트워크Socket 프로그래밍
실험 3. 유동식 플러그인 기반의 다중 스레드 병발 서버 리셋 프로그램 설계
0x00 실험 내용
실험2의 서버를 병발 서버로 바꾸다.
0x01 구현 프로세스
실현 방법
이것은 실험2의 코드와 일부분만 다르다. 서버에 라인을 하나 열어 현재 고객을 위해 단독으로 서비스를 제공하면 된다.여기는 사용합니다
pthread.h
라인을 만드는 것을 실현합니다.공용 함수 중 수정 부분
// comm.h
//
#include
void *asyncTcpEchoServer(LPVOID pParam)
{
int sock_res;
char recv_data[MAXLINE];
//
SOCKET sock_conn = *((SOCKET *)pParam);
do
{
memset(recv_data, 0, MAXLINE);
//
sock_res = recv(sock_conn, recv_data, MAXLINE, 0);
if (sock_res > 0)
{
cout << "The Data Received From Client Is:" << recv_data << endl;
//
sock_res = send(sock_conn, recv_data, sock_res, 0);
if (sock_res == SOCKET_ERROR)
{
cout << WSAGetLastError() << "Send Error!" << endl;
sock_res = -1;
}
else
{
cout << "The Data Sent From Server Is:" << recv_data << endl;
}
}
else
{
if (sock_res == 0)
{
cout << "Client is closed!" << endl;
}
else
{
cout << WSAGetLastError() << "Recv Error!" << endl;
sock_res = -1;
}
break;
}
} while (sock_res > 0);
if (sock_res == -1)
{
cout << "Disconnected or Sth. Error" << endl;
}
return nullptr;
}
서버 측
// server.cpp
#include "comm.h"
int main(int argc, char *argv[])
{
int res = -1;
SOCKET sock_conn;
SOCKET sock_listen;
pthread_t pThread;
char buff[MAXLINE]; //
//
res = startUp();
if (res == -1) return -1;
//
sock_listen = tcpServer(SEVER_PORT);
if (sock_listen == -1) return -1;
cout << "Server Start!" << endl;
while (true)
{
// , sock_conn
sock_conn = accept(sock_listen, nullptr, nullptr);
if (sock_conn != INVALID_SOCKET)
{
cout << "Conn Success!" << endl;
//
pthread_create(&pThread, nullptr, asyncTcpEchoServer, &sock_conn);
}
else
{
cout << WSAGetLastError() << "Accept Error!" << endl;
closeConn(sock_listen);
return -1;
}
}
//
closeConn(sock_listen);
return 0;
}
클라이언트 측은 변경할 필요가 없다
부: 일부 상황에서 select를 사용하여 병발을 실현할 수 있으며, select로 일부 장면에서 라인 팽창 문제를 효과적으로 해결할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux 가상 기기 설정 네트워크 환경역할: 가상 컴퓨터가 네트워크를 사용할 수 있도록 하는 것이 중요합니다. 편집할 때 dd는 한 줄을 삭제하고 i는 삽입합니다.: wq 쓰기 종료;ctrl+c ping 종료 네트워크 프로필 편집vi/etc/syscon...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.