`
lizhensan
  • 浏览: 370006 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C语言 socket 例子

 
阅读更多

借此地方整理以下socket编程的多种语言的实现,socket可以跨平台的通信,因此多语言、多平台下的实现有必要了解的。代码都是源自网上,感谢网友的分享。

 

socket编程在windows下的C语言实现,dev C++下编译通过

编译时设置编译选项 工具-->编译选项-->编译器,勾选在连接器命令行加入以下命令,在对话框中填-lwsock32

//server.c

#include <stdio.h>

#include <Winsock2.h>

int main()

{

    WORD wVersionRequested;

    WSADATA wsaData;

    int err;

   

    wVersionRequested = MAKEWORD( 1, 1 );

   

    err = WSAStartup( wVersionRequested, &wsaData );

    if ( err != 0 ) {

        return;

    }

   

    if ( LOBYTE( wsaData.wVersion ) != 1 ||

    HIBYTE( wsaData.wVersion ) != 1 ) {

        WSACleanup();

        return;

    }

    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

   

    SOCKADDR_IN addrSrv;

    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

    addrSrv.sin_family=AF_INET;

    addrSrv.sin_port=htons(6000);

   

    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

   

    listen(sockSrv,5);

   

    SOCKADDR_IN addrClient;

    int len=sizeof(SOCKADDR);

    while(1)

    {

        SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

        char sendBuf[50];

        sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));

        send(sockConn,sendBuf,strlen(sendBuf)+1,0);

        char recvBuf[50];

        recv(sockConn,recvBuf,50,0);

        printf("%s\n",recvBuf);

        closesocket(sockConn);

    }

}

 

//客户端代码

#include <stdio.h>

#include <Winsock2.h>

int main()

{

    WORD wVersionRequested;

    WSADATA wsaData;

    int err;

   

    wVersionRequested = MAKEWORD( 1, 1 );

   

    err = WSAStartup( wVersionRequested, &wsaData );

    if ( err != 0 ) {

        return;

    }

   

    if ( LOBYTE( wsaData.wVersion ) != 1 ||

        HIBYTE( wsaData.wVersion ) != 1 ) {

        WSACleanup( );

        return;

    }

    SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

   

    SOCKADDR_IN addrSrv;

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

    addrSrv.sin_family=AF_INET;

    addrSrv.sin_port=htons(6000);

    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

    send(sockClient,"hello",strlen("hello")+1,0);

    char recvBuf[50];

    recv(sockClient,recvBuf,50,0);

    printf("%s\n",recvBuf);

    closesocket(sockClient);

    WSACleanup();

}

 

linux下参考

http://blog.sina.com.cn/s/blog_4ad7c25401019qqb.html

 

ldd server 查看依赖的动态库

gcc 可以将多个源文件编译成一个动态库或可执行文件

 

 链接分:动态链接、静态链接两种

  • 大小: 151.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics