[英]How can I get the connected client's IP address using WinSock2 and C?
[英]Trying to get started with winsock in C, how to keep connected?
我是初學者,第一次嘗試使用 winsock 設置 TCP 客戶端。 我使用在示例中找到的一些代碼(見下文)組裝了一個最小的客戶端。 它基本上可以正常工作,即我可以接收服務器的消息,並且發送消息可以得到預期的結果。
但是,除非我添加一個不斷執行接收/發送例程(或者甚至只是接收部分)的循環,否則連接在建立后立即關閉。 我可以做些什么來保持連接打開並且只在需要時接收或發送某些東西嗎?
服務器是一個封閉源代碼的軟件,所以我不知道它是如何設置的。
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
int startWinsock(void) {
WSADATA wsa;
return WSAStartup(MAKEWORD(2, 2), &wsa);
}
int main(void) {
long rc;
SOCKET s;
SOCKADDR_IN addr;
printf("Starting Winsock... ");
rc = startWinsock();
if (rc != 0) {
printf("Error: unable to start Winsock, error code: %d\n", rc);
}
else {
printf("done.\n");
}
printf("Creating socket... ");
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
printf("Error: Unable to create socket, error code: %d\n", WSAGetLastError());
}
else {
printf("done.\n");
}
memset(&addr, 0, sizeof(SOCKADDR_IN));
addr.sin_family = AF_INET;
addr.sin_port = htons(10134);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
if (rc == SOCKET_ERROR) {
printf("Connection failed, error code: %d\n", WSAGetLastError());
}
else {
printf("Connected to 127.0.0.1.\n");
}
//if I add a loop here, which receives and/or sends stuff constantly, the connection stays established
return 0;
}
很簡單的:
換句話說:
強烈建議:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.