socket编程-c代码

 

下面是个socket编程的例子——客户端可发送字符到服务端,服务端负责显示客户端发送过来的字符。


客户端:

#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.LIB")
#define Port 3578
#define MaxSize 1024

void main()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested=MAKEWORD(2,2);

    err=WSAStartup(wVersionRequested,&wsaData);
    if (err!=0)
    {
        printf("WinSock DLL版本不足要求n");
        return;
    }

    if (LOBYTE(wsaData.wVersion)!=2||
    HIBYTE(wsaData.wVersion)!=2)
   {
       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");//把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(Port);

    //向服务器发送请求
    if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) == -1)
    {
        printf("连接失败!输入回车结束程序!n");
        getchar();
        return;
    }

    //接受数据
    char recBuf[MaxSize];
    recv(sockClient,recBuf,MaxSize,0);
    printf("%sn",recBuf);

    //输入name
    printf("Input your Name:n");
    char name[20] = {0};
    gets(name);

    //发送数据
    send(sockClient,name,strlen(name)+1,0);
    while(1)
    {
        gets(recBuf);
        send(sockClient,recBuf,strlen(recBuf)+1,0);
    }
    //关闭套接字
    closesocket(sockClient);
    getchar();
    WSACleanup();
}

 

 

服务器端:

#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.LIB")
#define Port 3578
#define MaxSize 1024

void main()
{
    //加载套接字
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested=MAKEWORD(2,2);

    err = WSAStartup(wVersionRequested,&wsaData);
    if (err!=0)
    {
        printf("WinSock DLL版本不足要求n");
        return;
    }

    if (LOBYTE(wsaData.wVersion)!=2||
    HIBYTE(wsaData.wVersion)!=2)
    {
         WSACleanup();
         return;
     }

     //创建监听的套接字
     SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

     SOCKADDR_IN addrSrv;

     //把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序
     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY)

     addrSrv.sin_family = AF_INET;
     addrSrv.sin_port = htons(Port);

     //绑定套接字
     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
     //将套接字设置为监听模式,准备接受用户请求
     listen(sockSrv,5);

     SOCKADDR_IN addrClient;
     int len=sizeof(SOCKADDR);

     printf("%sn","Welcome,the Host is running!nWating for someone comes in!");
     while (1)
     {
          //等待用户请求到来
          SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
          char sendBuf[MaxSize];
          sprintf(sendBuf,"Welcome to the Host,%s.", inet_ntoa(addrClient.sin_addr));
          //发送数据
          send(sockConn,sendBuf,MaxSize,0);
          //接收数据
          char revBuf[MaxSize];
          char name[20] = {0};
          int flag = 1;
          while(recv(sockConn,revBuf,MaxSize,0) != -1)
          {
                 //打印接受数据
               if(flag == 1)
               {
                    strcpy(name, revBuf);
                    printf("%s comes in!n",name);
                    flag = 2;
                }
                else
                {
                     printf("%s:%sn",name, revBuf);
                }
           }
           //关闭套接字
           closesocket(sockConn);
      }
}

 

【转】http://blog.sina.com.cn/s/blog_70441c8e0100q0fq.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值