導航:首頁 > 網路信息 > c語言windows怎麼設置網路通訊

c語言windows怎麼設置網路通訊

發布時間:2023-07-04 14:24:58

㈠ 求C語言高手,實現一個簡單的TCPIP程序以實現兩台計算機之間的聊天通信,

你上面給出的代碼其實就是MSDN裡面的演示代碼,不過不完整,只演示了兩個函數的使用,我給你看看我寫的TCP通訊程序,可以在同一個區域網內的兩台不同計算機之間聊天:

這其實就是某本將網路通訊的教程裡面的例子,不過是我自己重寫了一遍,下面給你代碼:

========================

下面是公共代碼:

========================

#ifndef__CINITSOCK__H__

#define__CINITSOCK__H__

#include<winsock2.h>

#include<iphlpapi.h>

#pragmacomment(lib,"ws2_32.lib")

#pragmacomment(lib,"iphlpapi.lib")

classCInitSock

{

public:

CInitSock(intnMinorVer=2,intnMajorVer=2)

{

WSADATAwsData;

WORDwVer=MAKEWORD(nMinorVer,nMajorVer);

if(0!=WSAStartup(wVer,&wsData))exit(0);

}

~CInitSock()

{

WSACleanup();

}

};

#endif

========================

下面是客戶端的代碼:

=======================

#include"CInitSock.h"

#include<iostream>

usingnamespacestd;

CInitSockg_Sock;

voidmain()

{

SOCKETsockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(INVALID_SOCKET==sockClient)

return;

sockaddr_insockAddr;

sockAddr.sin_family=AF_INET;

sockAddr.sin_port=htons(4567);

sockAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

if(-1==connect(sockClient,(sockaddr*)&sockAddr,sizeof(sockAddr)))

{

cout<<"connectfailed"<<endl;

return;

}

while(true)

{

charszBuf[MAX_PATH];

ZeroMemory(szBuf,sizeof(szBuf));

cout<<"YouSay:";

cin>>szBuf;

if(SOCKET_ERROR ==send(sockClient,szBuf,MAX_PATH,0))

{

cout<<"sendfailed"<<endl;

return;

}

intnRecvLen=recv(sockClient,szBuf,MAX_PATH,0);

if(nRecvLen>0)

{

//szBuf[nRecvLen]='';

cout<<"ServiceSay:"<<szBuf<<endl<<endl;

}

else

{

cout<<"recvfailed"<<endl;

return;

}

}

closesocket(sockClient);

}

======================

下面是服務端的代碼:

======================

#include"CInitSock.h"

#include<iostream>

usingnamespacestd;

CInitSockg_Sock;

voidmain()

{

SOCKETsockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(INVALID_SOCKET==sockClient)

return;

sockaddr_insockAddr;

sockAddr.sin_family=AF_INET;

sockAddr.sin_port=htons(4567);

sockAddr.sin_addr.S_un.S_addr=INADDR_ANY;

bind(sockClient,(sockaddr*)&sockAddr,sizeof(sockAddr));

listen(sockClient,SOMAXCONN);

charszBuf[MAX_PATH];

sockaddr_inremoteAddr;

intnLen=sizeof(sockaddr_in);

SOCKETsock=accept(sockClient,(sockaddr*)&remoteAddr,&nLen);

while(true)

{

intnRecvLen=recv(sock,szBuf,MAX_PATH,0);

if(nRecvLen>0)

{

cout<<"ClientSay:"<<szBuf<<endl<<endl;

}

ZeroMemory(szBuf,sizeof(szBuf));

cout<<"YouSay:";

cin>>szBuf;

if(SOCKET_ERROR==send(sock,szBuf,MAX_PATH,0))

{

cout<<"sendfailed"<<endl;

}

}

closesocket(sock);

closesocket(sockClient);

}

希望能夠幫到樓主。

㈡ Windows系統用C語言寫TCP通信

#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
typedef struct{
SOCKET accpt;
int lock;
}Arg;
void *transfer(void *arg)
{
Arg * info = (Arg *)arg;
SOCKET clientSock;
char recvbuf[102];
char sendBuf[] = "10";
int ret;
memcpy(&clientSock,(void*)&info->accpt,sizeof(clientSock));
info->lock =1;
while (TRUE)
{
ret = send(clientSock,sendBuf,2,0);
if (ret == -1)
{
break;
}
ret = recv(clientSock,recvbuf,102,0);
printf("%s\n",recvbuf);
}
return (void *)0;
}
void* timer(void *arg)
{
time_t last = time(NULL);
time_t now;
int i = 20;
while(i--)
{
now = time(NULL);
if(now - last == 1)
{
printf("1s past!\n");
last = now;
}
Sleep(500);
}
printf("timer exit.\n");
return (void *)0;
}
int main(void) {
WSADATA wsaData;
SOCKET ListenSocket;
SOCKADDR_IN service,client;
int len = sizeof(client);
Arg argument;
pthread_t tid;
char sendBuf[] = "ID=2;WHAT=host";
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR) {
printf("Error at WSAStartup()\n");
return 1;
}
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_port = htons(27115);
if (bind( ListenSocket,
(SOCKADDR*) &service,
sizeof(service)) == SOCKET_ERROR) {
printf("bind() failed.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}
if (listen( ListenSocket, 1 ) == SOCKET_ERROR) {
printf("Error listening on socket.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}
argument.lock = 1;
printf("Waiting for client to connect...\n");
pthread_create(&tid,NULL,timer,NULL);
while(TRUE){
argument.accpt = accept( ListenSocket, (SOCKADDR*)&client, &len );
if (argument.accpt == INVALID_SOCKET) {
printf("accept failed: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
} else {
printf("accept%s:%d\n",inet_ntoa(client.sin_addr),client.sin_port);
while (!argument.lock);
argument.lock = 0;
// sendto(argument.accpt,sendBuf,sizeof(sendBuf),0,(SOCKADDR*)&client,len);
pthread_create(&tid,NULL,transfer,&argument);
//send(AcceptSocket,sendBuf,sizeof(sendBuf),0);
}
}
// No longer need server socket
closesocket(ListenSocket);
WSACleanup();
return 0;
}

㈢ 在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庫就可以了。

㈣ 如何在windows上用C語言實現MQTT協議

C語言是一門抄通用計襲算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。 目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

㈤ 關於用C語言開發一個簡單的區域網聊天軟體

Linux系統都是C寫的 用C當然行得通

就是個socket編程嘛

我們原來做過一個的原理描述 當然 這個是專C\S模式的 其實你可以做屬成 無服務端的

本系統具有區域網聊天功能。採用了C\S模式(即伺服器創建套接字後,轉換為監聽套接字,一直在監聽是否由客戶端的請求。伺服器接收到相應的請求後,進行相應的處理)。採用了TCP/IP(面向連接)協議。運用了SOCKET套接字實現了很方便的訪問TCP/IP協議。多線程的操作。
伺服器的程序(簡述):
創建socket-->bind()-->listen()-->accept()-->recv/send()-->close();
客戶端的程序(簡述):
創建scoket-->發送connect-->recv/send()-->close();

㈥ 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();
    }

㈦ 在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

(7)c語言windows怎麼設置網路通訊擴展閱讀

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語言windows怎麼設置網路通訊相關的資料

熱點內容
excel表格文件化亂碼 瀏覽:986
win7無法打開隱藏文件 瀏覽:757
怎樣把壓縮文件變成空白文件 瀏覽:516
wokrNC和UG編程哪個好 瀏覽:487
愛奇藝隨刻文件名 瀏覽:40
wps是怎麼壓縮文件 瀏覽:986
dos配置文件名 瀏覽:582
java軟體工程師做什麼 瀏覽:897
3dmax導出ive文件 瀏覽:464
數據重復性好是什麼意思 瀏覽:166
如何查找電腦文件使用歷史記錄 瀏覽:821
linux可以運行exe的文件嗎 瀏覽:935
庫幣是哪個國家的app 瀏覽:201
大智慧internet文件夾有哪些文件 瀏覽:89
編程培訓課程哪個排名好 瀏覽:124
我的cad怎麼沒顯示文件選項卡 瀏覽:952
命令行當前是哪個資料庫 瀏覽:588
為什麼appstore打開空白 瀏覽:574
選貨車軟體什麼app最好 瀏覽:577
psv仙境傳說ace如何降級版本 瀏覽:460

友情鏈接