【发布时间】:2023-03-25 15:56:01
【问题描述】:
我是 C++ 新手,我正在使用这个家伙代码 youtube。他制作了一个控制台套接字应用程序并连接到在他的视频中似乎可以使用的 telnet。
当我尝试相同的方法时,我在底部的 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;
}
}
【问题讨论】:
-
您是否也有适当的客户端代码(实际连接的人)?循环是无限的是可以的,你实际上是通过不在你的 for() 中指定中断条件来告诉它这样做。如果您是 C++ 新手,那么在做一些比网络更复杂的事情之前,您应该首先掌握语言基础知识,这只是一个建议。
-
这里是客户端pastebin.com/QFT8DM5z的代码
-
如果您更改了原始帖子以包含答案,请在您所做的帖子本身中添加快速评论,并接受帮助您解决问题的答案。否则人们会认为这个问题没有答案,并尝试修复你的(已经更正的)代码。
-
是的,它现在可以工作了。谢谢
标签: c++ sockets winapi networking