저는 C ++을 처음 사용 했고이 사람 코드 youtube 와 함께 일하고있었습니다 . 그는 콘솔 소켓 애플리케이션을 만들고 그의 비디오에서 작동하는 것처럼 보이는 텔넷에 연결합니다.
내가 똑같은 것을 시도하면 무한 루프가 발생하고 하단의 for 루프 후 if () 조건도 작동하지 않습니다. 바라건대 너희들이 나를 도울 수 있기를 바랍니다.
//clientserver.h
#pragma comment(lib, "ws2_32.lib")
#include <sdkddkver.h>
#include <conio.h> //for getche()
#include <stdio.h>
#include <winSock2.h>
#include <windows.h>
#include <iostream>
clientserver.cpp
#include "clientserver.h"
using namespace std;
void main(){
long answer;
WSAData wsaData;
WORD DLLVersion;
DLLVersion = MAKEWORD(2,1);
answer = WSAStartup(DLLVersion,&wsaData);
SOCKADDR_IN addr;
int addrlen = sizeof(addr);
SOCKET sListen;
SOCKET sConnect;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET; //was missing
addr.sin_port = htons(8989);
sListen = socket(AF_INET,SOCK_STREAM,NULL);
//the socket becomes the structure "addr"
bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
//now we have to say that the socket is listening for an incoming connection.
listen(sListen, SOMAXCONN);
for(;;){
cout << "waiting for connection" << endl;
if (sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen)){
cout << "socket found a connection" << endl;
//cin >> ab101;
}
}
먼저이 작업을 수행 한 경우 ==
다시 를 제거하고 sConnect = accept()
등호 기호 하나만 남겨 두십시오 .
그런 다음 표시된 줄을 코드에 추가합니다.
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET; // <----- THIS ONE RIGHT HERE!
addr.sin_port = htons(8989);
sListen = socket(AF_INET,SOCK_STREAM,NULL);
이전에는 IPv4 주소 계열로 소켓을 만들었습니다.
sConnect = socket(AF_INET, SOCK_STREAM,NULL);
.NET에서 bind()
사용할 주소 패밀리를 지정하지 않았기 때문에 나중에 호출이 실패 한다고 가정 합니다 SOCKADDR_IN
. 일치하지 않고 소켓을 바인딩 할 수없는 경우은 accept()
실제로 아무것도 수신하지 않고 오류 코드를 반환합니다.
내 컴퓨터에서 클라이언트 및 서버 코드를 시도했지만 적어도 이것이 문제였습니다. 위의 줄을 코드에 추가하고 도움이되었는지 알려주십시오. 그리고 원래 게시물에서와 같이을로 변경하는 ==
것을 잊지 마십시오 =
!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다