#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) |