當前位置:首頁 » 編程軟體 » csocket編程

csocket編程

發布時間: 2022-01-23 20:44:35

『壹』 socket編程 c語言

sender 沒有看到 i 列印,是由於你沒有加換行,由於標准輸出是行緩沖,所以不會馬上列印,而是要等遇到 \n 或者進程結束才會列印。你可以寫成 printf("%d\n"); 就能看到發送方的列印。

接收方也可以加上printf來列印。

這么簡單的程序,用gdb自己調試也可以。

『貳』 C語言Socket編程問題(互相通信)

客戶端與伺服器建立連接
客戶端調用connect函數時,已經知道伺服器的IP地址以及埠號
伺服器中accept返回的套接字中,包含客戶端的IP地址以及埠號
建立的連接是相互的,所以可以互通消息。

『叄』 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫

需要用到的頭文件包含:

#include <winsock2.h>

#include <windows.h>

與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫

Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:

Winsock 1:

Windows CE平台支持。

頭文件:WinSock.h

庫:wsock32.lib

Winsock 2:

部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;

頭文件:WinSock2.h

庫:ws2_32.lib

mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll

(3)csocket編程擴展閱讀

winsock庫的載入與卸載:

載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

載入成功,返回值為0。

WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~

LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。

卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。

『肆』 C語言socket編程

send用戶名和密碼,然後再伺服器判斷這段字元串的賬號密碼是否符合,然後客戶端recv,如果recv的字元串是登錄成功,才進行下面操作.否則就提示用戶名和密碼有誤.

『伍』 在windows下,如何用純C語言實現socket網路編程

mfc只是對socket進行了一些封裝,大部分人做網路編程都是用的原始的socket,比如如下介面都可以在c下進行調用
1.socket()
2.bind()
3.connect()
4.listen()
5.accept()
6.send() 和recv()
7.sendto() 和recvfrom()
8.close() 和shutdown()
9.getpeername()
10.gethostname()
這些介面是在Winsock2.h中定義的不是在mfc中定義的,你只需要包含Winsock2.h頭文件和Ws2_32.lib庫就可以了。

『陸』 C語言socket編程要怎麼實現伺服器可以發消息給客戶端

先要理解socket是什麼?
簡單的說socket是一個全雙工的通信通道,
即使用TCP或者UDP通信時均可以在發送消息的同時接受消息,
它不區分是否是伺服器。
根據這個概念你的問題就很好回答。
》當客戶端與伺服器連接後。有什麼方法使伺服器可以隨時隨地發消息給客戶端?
》我現在只能。客戶端發個消息給伺服器。伺服器才能發個消息給客戶端。也就是說客戶端不發消息。伺服器就沒法發消息給客戶端。
》求大牛給個思路。當連接後。客戶端與伺服器雙方可以隨時隨地通信!
使用多線程,一個維持接受邏輯,一個維持送信邏輯,即可完成同時接受及發送。
客戶端及伺服器端均做上述設置。
而你的做法是在一個線程中執行接受與送信,因此只能按照順序邏輯完成接收與送信。
關鍵點是多線程。

『柒』 c++csocket編程 5種模式

1. 構造CSocket對象,如以下的形式:

CSocket Serversocket;

2. 利用CSocket對象的Create()函數創建Windows Socket,Create()函數會調用Bind()函數將此Socket綁定到指定的地址上,其原型為:

BOOL Create (UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL);

其中nSocketPort參數指定通信連接的埠號,埠號可以任意指定,但最好不要使用系統默認的一些埠號,例如21是FTP文件傳輸使用的埠號;

3. Socket創建完畢之後,在伺服器端進行監聽客戶的連接請求,使用如下的代碼:

ServerSocket.Listen();

緊接著對於客戶端而言,將會調用Connect()函數向伺服器發送連接請求,而對於伺服器而言,則會調用Accept()函數對客戶端發送過來的請求連接進行接受和處理,Accept()函數可以創建一個和監聽Socket相同的連接Socket來處理客戶的請求,二原來的Socket仍然處於監聽狀態,使用的形式如下。

客戶端:

ClientSocket.Connect(伺服器的地址,伺服器的埠號);

伺服器端:

CSocket ReceiveSocket;

ServerSocket.Accept(連接Socket,客戶的地址結構,客戶地址結構的長度)

4. 對於數據流伺服器類型而言,伺服器和客戶各自通過調用函數來完成數據的發送和接受,使用如下的語句:

ServerReceive.Receive(緩沖區,緩沖區的長度,接受標志位);

Client.Send(緩沖區,緩沖區的長度,發送標志位);

5. 在客戶端與伺服器端的數據傳輸完成之後,調用下述語句,釋放Socket所佔有的資源。

ServerSocket.Close();

ReceiveSocket.Close();

ClientSocket.Close();

『捌』 C 語言 C++ socket編程

可以接受!服務端可以同時連接多個客戶端,這樣看服務端程序是如何實現的!一般會有上限,太多就要延時等待!如果同時連接的客戶端不是太多,會分時復用!

『玖』 C語言socket編程怎麼實現2個客戶端之間通信

  1. 網路的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似於打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨後的連接建立、數據傳輸等操作都是通過該Socket實現的。

  2. 下面用Socket實現一個windows下的c語言socket通信例子,這里我們客戶端傳遞一個字元串,伺服器端進行接收。

    【伺服器端】
    #include"stdafx.h"
    #include<stdio.h>
    #include<winsock2.h>
    #include<winsock2.h>
    #defineSERVER_PORT5208//偵聽埠
    voidmain()
    {
    WORDwVersionRequested;
    WSADATAwsaData;
    intret,nLeft,length;
    SOCKETsListen,sServer;//偵聽套接字,連接套接字
    structsockaddr_insaServer,saClient;//地址信息
    char*ptr;//用於遍歷信息的指針
    //WinSock初始化
    wVersionRequested=MAKEWORD(2,2);//希望使用的WinSockDLL的版本
    ret=WSAStartup(wVersionRequested,&wsaData);
    if(ret!=0)
    {
    printf("WSAStartup()failed! ");
    return;
    }
    //創建Socket,使用TCP協議
    sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(sListen==INVALID_SOCKET)
    {
    WSACleanup();
    printf("socket()faild! ");
    return;
    }
    //構建本地地址信息
    saServer.sin_family=AF_INET;//地址家族
    saServer.sin_port=htons(SERVER_PORT);//注意轉化為網路位元組序
    saServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//使用INADDR_ANY指示任意地址

    //綁定
    ret=bind(sListen,(structsockaddr*)&saServer,sizeof(saServer));
    if(ret==SOCKET_ERROR)
    {
    printf("bind()faild!code:%d ",WSAGetLastError());
    closesocket(sListen);//關閉套接字
    WSACleanup();
    return;
    }

    //偵聽連接請求
    ret=listen(sListen,5);
    if(ret==SOCKET_ERROR)
    {
    printf("listen()faild!code:%d ",WSAGetLastError());
    closesocket(sListen);//關閉套接字
    return;
    }

    printf("Waitingforclientconnecting! ");
    printf("Tips:Ctrl+ctoquit! ");
    //阻塞等待接受客戶端連接
    while(1)//循環監聽客戶端,永遠不停止,所以,在本項目中,我們沒有心跳包。
    {
    length=sizeof(saClient);
    sServer=accept(sListen,(structsockaddr*)&saClient,&length);
    if(sServer==INVALID_SOCKET)
    {
    printf("accept()faild!code:%d ",WSAGetLastError());
    closesocket(sListen);//關閉套接字
    WSACleanup();
    return;
    }
    charreceiveMessage[5000];
    nLeft=sizeof(receiveMessage);
    ptr=(char*)&receiveMessage;
    while(nLeft>0)
    {
    //接收數據
    ret=recv(sServer,ptr,5000,0);
    if(ret==SOCKET_ERROR)
    {
    printf("recv()failed! ");
    return;
    }
    if(ret==0)//客戶端已經關閉連接
    {
    printf("Clienthasclosedtheconnection ");
    break;
    }
    nLeft-=ret;
    ptr+=ret;
    }
    printf("receivemessage:%s ",receiveMessage);//列印我們接收到的消息。

    }
    //closesocket(sListen);
    //closesocket(sServer);
    //WSACleanup();
    }
    【客戶端】
    #include"stdafx.h"
    #include<stdio.h>
    #include<stdlib.h>
    #include<winsock2.h>
    #defineSERVER_PORT5208//偵聽埠
    voidmain()
    {
    WORDwVersionRequested;
    WSADATAwsaData;
    intret;
    SOCKETsClient;//連接套接字
    structsockaddr_insaServer;//地址信息
    char*ptr;
    BOOLfSuccess=TRUE;
    //WinSock初始化
    wVersionRequested=MAKEWORD(2,2);//希望使用的WinSockDLL的版本
    ret=WSAStartup(wVersionRequested,&wsaData);
    if(ret!=0)
    {
    printf("WSAStartup()failed! ");
    return;
    }
    //確認WinSockDLL支持版本2.2
    if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
    {
    WSACleanup();
    printf("InvalidWinSockversion! ");
    return;
    }
    //創建Socket,使用TCP協議
    sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(sClient==INVALID_SOCKET)
    {
    WSACleanup();
    printf("socket()failed! ");
    return;
    }
    //構建伺服器地址信息
    saServer.sin_family=AF_INET;//地址家族
    saServer.sin_port=htons(SERVER_PORT);//注意轉化為網路節序
    saServer.sin_addr.S_un.S_addr=inet_addr("192.168.1.127");
    //連接伺服器
    ret=connect(sClient,(structsockaddr*)&saServer,sizeof(saServer));
    if(ret==SOCKET_ERROR)
    {
    printf("connect()failed! ");
    closesocket(sClient);//關閉套接字
    WSACleanup();
    return;
    }


    charsendMessage[]="hellothisisclientmessage!";
    ret=send(sClient,(char*)&sendMessage,sizeof(sendMessage),0);
    if(ret==SOCKET_ERROR)
    {
    printf("send()failed! ");
    }
    else
    printf("clientinfohasbeensent!");
    closesocket(sClient);//關閉套接字
    WSACleanup();
    }
熱點內容
python編輯excel 發布:2024-12-25 09:21:19 瀏覽:151
w7將電腦文件如何共享文件夾共享文件夾 發布:2024-12-25 09:12:41 瀏覽:187
安卓系統中哪個軟體最耗電 發布:2024-12-25 08:38:44 瀏覽:824
ssrssql 發布:2024-12-25 08:38:41 瀏覽:953
ai定位腳本 發布:2024-12-25 08:33:35 瀏覽:956
炎黃解說我的世界中國伺服器 發布:2024-12-25 08:33:28 瀏覽:796
sql2008發布 發布:2024-12-25 08:27:09 瀏覽:342
如何用存檔開伺服器 發布:2024-12-25 08:23:27 瀏覽:713
安卓手機為什麼不顯示通知欄 發布:2024-12-25 08:21:15 瀏覽:906
解壓肚子疼 發布:2024-12-25 08:15:01 瀏覽:589