簡體   English   中英

嘗試在C開始使用winsock,如何保持連接?

[英]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;
}

很簡單的:

  1. 您的客戶端嘗試連接到服務器。
  2. 如果成功,發送命令,並讀取響應。
  3. 繼續接收和發送直到你“完成”,然后關閉套接字。

換句話說:

  • 您可以控制何時關閉連接 - 套接字將保持打開狀態,直到您關閉它。
  • 本質上,您是在發明自己的自定義網絡協議

強烈建議:

查看Beej 的網絡編程指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM