程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話socket編程開辟運用示例

C說話socket編程開辟運用示例

編輯:關於C++

C說話socket編程開辟運用示例。本站提示廣大學習愛好者:(C說話socket編程開辟運用示例)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話socket編程開辟運用示例正文




完成步調:

1. Server端


#include <stdio.h>                   //用於printf等函數的挪用
#include <winsock2.h>                //Socket的函數挪用 
#pragma comment (lib, "ws2_32")      //C說話援用其他類庫時,除.h文件外,還要參加對應的lib文件(這個分歧於C#)


int main()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    SOCKET s=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    sockaddr_in sockaddr;
    sockaddr.sin_family=PF_INET;
    sockaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");   //須要綁定到當地的哪一個IP地址
    sockaddr.sin_port=htons(9000);                          //須要監聽的端口
    bind(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR));        //停止綁定舉措

    listen(s, 1);                                           //啟動監聽

    printf("listening on port [%d].\n", 9000);

    while(TRUE)
    {
        SOCKADDR clientAddr;
        int size=sizeof(SOCKADDR);

        SOCKET clientsocket;
        clientsocket=accept(s, &clientAddr, &size);               //壅塞,直到有新tcp客戶端銜接
        printf("***SYS***    New client touched.\n");

        char* msg="Hello, my client.\r\n";
        send(clientsocket, msg, strlen(msg)+sizeof(char), NULL);  //這裡的第三個參數要留意,是加了一個char長度的
        printf("***SYS***    HELLO.\n");

        while(TRUE)
        {
            char buffer[MAXBYTE]={0};
            recv(clientsocket, buffer, MAXBYTE, NULL);            //一向吸收客戶端socket的send操作
            printf("***Client***    %s\n", buffer);
        }

        closesocket(clientsocket);                                //封閉socket
    }

    closesocket(s);                           //封閉監聽socket

    WSACleanup();                                                //卸載

    getchar();                                                  

    exit(0);
}

因為還在進修中,是以沒有完成多線程,是以客戶端現實上只能1個,其他的會被擋在裡面

關於socket的緩沖區還有點學問,好比最初要\r\n開頭等,都是有緣由的,建議看看材料。

2. Client端


#include <stdio.h>                      //用於輸出、輸入函數的挪用,printf, gets
#include <winsock2.h>                   //socket頭文件
#include <Windows.h>                    //為了便利調試,所以參加了期待2秒才停止銜接server,這裡用到了sleep函數

#pragma comment (lib, "ws2_32")         //socket庫文件


int main()
{
    Sleep(2000);                        //覺醒2秒再銜接server

    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    SOCKET s=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    sockaddr_in sockaddr;
    sockaddr.sin_family=PF_INET;
    sockaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    sockaddr.sin_port=htons(9000);

    connect(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR));

    char buffer[MAXBYTE]={0};
    recv(s, buffer, MAXBYTE, NULL);
    printf("***SERVER***%s", buffer);

    while(TRUE)
    {
        char* mymsg=new char[100000];
        printf("You can chat with server now:\n");
        gets(mymsg);
        send(s, mymsg, strlen(mymsg)+sizeof(char), NULL);
        /*
           recv函數中的bufferlength參數是可以固定值的
           send函數中的bufferlength參數不克不及固定值,須要看現實長度,而且斟酌到'\0'字符串
        */
    }

    closesocket(s);

    WSACleanup();

    getchar();

    exit(0);
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved