Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474213
  • 博文数量: 117
  • 博客积分: 3195
  • 博客等级: 中校
  • 技术积分: 1156
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-04 01:44
文章分类

全部博文(117)

文章存档

2012年(5)

2011年(5)

2010年(46)

2009年(61)

我的朋友

分类:

2010-01-08 16:34:10

 

#include <winsock2.h>
#include <stdio.h>
#define SERVER_PORT 8888    /*服务端口*/
#define MAX_MSG_SIZE 2048    /*缓冲区大小*/
#pragma comment(lib, "ws2_32")

int GetServerAddr(char *addrname)
{
    printf("please input server addr:");
    scanf("%s", addrname);
    return 1;
}

/*客户端过程:发送给服务器一条消息,再接收来自服务器的消息,再显示出来*/
int Client_Proc(int sock)
{
    int n;
    char msg[MAX_MSG_SIZE];


    strcpy(msg, "Hi, I am Client!");

    n = send(sock, msg, strlen(msg), 0);
    n = recv(sock, msg, MAX_MSG_SIZE, 0);
    msg[n] = 0;
    printf("%s\n", msg);
    return 1;
}

int main()
{
    int cli_sock;    /*客户端socket*/
    int addrlen;
    char seraddr[14];
    struct sockaddr_in ser_addr,    /*服务器地址*/
                        cli_addr;    /*客户端地址*/

    /*建立与socket库绑定*/
    WSADATA WSAData;
    if(WSAStartup(MAKEWORD(2,2), &WSAData) != 0)
    {
        fprintf(stderr, "WSAStartup failed: %d\n", GetLastError());
        exit(1);
    }

    GetServerAddr(seraddr);        /*获得主机的IP地址*/

    /*创建连接的SOCKET*/
    cli_sock = socket(AF_INET, SOCK_STREAM, 0);
    if(cli_sock < 0)
    {
        fprintf(stderr, "socket error: %d\n", GetLastError());
        exit(1);
    }

    /*初始化客户端地址*/
    addrlen = sizeof(struct sockaddr_in);
    memset(&cli_addr, 0, addrlen);
    cli_addr.sin_family = AF_INET;
    cli_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);    /*所有IP地址*/
    cli_addr.sin_port = 0;

    /*初始化服务器端地址*/
    memset(&ser_addr, 0, addrlen);
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_addr.S_un.S_addr = inet_addr(seraddr);
    ser_addr.sin_port = htons(SERVER_PORT);

    /*请求连接*/
    if(connect(cli_sock, (struct sockaddr*)&ser_addr, addrlen) != 0)
    {
        fprintf(stderr, "connect error: %d\n", GetLastError());
        closesocket(cli_sock);
        exit(1);
    }
    Client_Proc(cli_sock);

    closesocket(cli_sock);
    WSACleanup();
    return 0;
}


函数说明:

(1)connect 请求与服务器建立连接

原型:int connect (SOCKET s,const struct sockaddr FAR *name,int namelen);

s为客户端的套接字描述符;name服务器端地址结构;namelen为name的长度;成功返回0.

(2)send 发送数据

原型:int send (SOCKET s, const char FAR * buf, int len, int flags);

s为发送端套接字描述符,buf是发送端等待发送数据的缓冲区,len 要发送数据的字节数,flags是附加标志,通常为0。成功后返回发送数据的字节数。

(3)recv 接收数据

原型:int recv(SOCKET s, char FAR *buf, int len, int flags)

s为接收端套接字描述符,buf是接收端等待接收数据的缓冲区,len指定要接收数据的字节数,flags也是标志。成功返回接收到的数据的字节数。

 

ps: 下一步是实现客户端与服务器端聊天,加油小c!

阅读(718) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~