當前位置:首頁 » 編程語言 » c語言網路通信編程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言網路通信編程

發布時間: 2023-03-11 02:57:43

A. c語言在通信方面的應用

如果你明白通信就是雙方約定協議的過程就能明白了,C是用來編寫通信協議的,把你的需要通信的內容通過c編寫的轉換驅動,編譯成通信協議格式,發給對方,

說白了,C就是個工具,不一定C,basic也能寫成XP,關鍵看你怎麼用,Unix 都是C編寫的,

單片機最好的驅動就是C了,移植性強,可讀性好,定義也很方便,當年畢設都是用C編寫51單片機的一個通信板驅動,
個人理解,通信就是握手。哈哈。

B. 在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

(2)c語言網路通信編程擴展閱讀

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

D. c語言可以編寫通過無線網路傳輸的協議嗎

你好!
c
語言可以。
你說不考慮硬體是不可能的,軟體是建立在硬體的基礎上的,其實能編寫通過無線網路傳輸的協議不斤只有c
語言,但是能夠和硬體緊密結合的還得數c
語言了
基於unix和linux
的無線網路傳輸的協議幾乎都是用c編寫的
我的回答你還滿意嗎~~

E. 如何用C語言編寫一個簡單的聊天室程序

這樣:

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <netdb.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <arpa/inet.h>

#include <pthread.h>

#define MAXLINE 100;

void *threadsend(void *vargp);

void *threadrecv(void *vargp);

int main()

{

int *clientfdp;

clientfdp = (int *)malloc(sizeof(int));

*clientfdp = socket(AF_INET,SOCK_STREAM,0);

struct sockaddr_in serveraddr;

struct hostent *hp;

bzero((char *)&serveraddr,sizeof(serveraddr));

serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(15636);

serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

if(connect(*clientfdp,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) < 0){

printf("connect error ");

exit(1);

}

pthread_t tid1,tid2;

printf("connected ");

while(1){

pthread_create(&tid1,NULL,threadsend,clientfdp);

pthread_create(&tid2,NULL,threadrecv,clientfdp);

}

return EXIT_SUCCESS;

}

void *threadsend(void * vargp)

{

//pthread_t tid2;

int connfd = *((int *)vargp);

int idata;

char temp[100];

while(1){

//printf("me: ");

fgets(temp,100,stdin);

send(connfd,temp,100,0);

printf(" client send OK ");

}

printf("client send ");

return NULL;

}

void *threadrecv(void *vargp)

{

char temp[100];

int connfd = *((int *)vargp);

while(1){

int idata = 0;

idata = recv(connfd,temp,100,0);

if(idata > 0){

printf("server : %s ",temp);

}

}

return NULL;

}

(5)c語言網路通信編程擴展閱讀:

注意事項

linux下編譯多線程代碼時,shell提示找不到 pthread_create函數,原因是 pthread.h不是linux系統默認載入的庫文件,應該使用類似如下gcc命令進行編譯:

gcc echoserver.c -lpthread -o echoserver

只要注意 -lpthread參數就可以了。