您的位置:首页 > 其它

一个基本的SOCKET客户端程序

2014-11-04 09:30 441 查看
//头文件

#include <stdio.h>

#include <Winsock2.h>

//定义常量

#define RECV_BUFFER_SIZE 8192

//主函数

int main(int argc,char *argv[])

{

//定义变量

sockaddr_in clientService; //套接字地址变量

SOCKET ConnectSocket; //SOCKET套接字

WSADATA wsaData; //WSADATA结构体

LPVOID recvbuf; //接收缓存

int byteSent; //发送字节数

int byteRecv = 0; //接收字节数

char sendbuf[32] = "get information"; //默认发送的数据

//初始化套接字库

int iResult = WSAStartup(MAKEWORD(2,2),&wsaData);

if(iResult != NO_ERROR)

{

printf("初始化套接字失败");

return 0;

}

//创建套接字

ConnectSocket = socket(AF_INET, //TCP/IP协议

SOCK_STREAM, //TCP传输

IPPROTO_TCP //TCP类型

);

if(ConnectSocket == INVALID_SOCKET)

{

//创建失败

printf("创建套接字失败!\n");

WSACleanup();

return 0;

}

//创建服务器段的通信协议,IP地址和端口

clientServer.sin_family = AF_INET; //TCP_IP协议

clientServer.sin_addr.s_addr = inet_addr("127.0.0.1"); //本机地址

clientServer.sin_port = htons(10000); //端口

//连接到服务器

if(connect(ConnectSocket,(SOCKADDR*)&clientService,sizeof(clientService)) == SOCKET_ERROR)

{

printf("Failed to connect,error %d\n",WSAGetLastError());

closesocket(ConnectSocket);

WSACleanup();

return 0;

}

//向服务器发送数据

byteSent = send(ConnectSocket, //socket

sendbuf, //要发送的数据

lstrlen(sendbuf)+1, //数据长度

0); //无标志

if(byteSent == SOCKET_ERROR)

{

printf("Error at Send,%d\n",WSAGetLastError());

closesocket(ConnectSocket);

WSACleanup();

return 0;

}

//准备接收数据

recvbuf = HeapAlloc(GetProcessHeap(),0,RECV_BUFFER_SIZE); //调用HeapAlloc函数申请堆空间

//循环接收数据

while(byteRecv != SOCKET_ERROR)

{

bytesRecv = recv(ConnectSocket, //套接字

recvbuf, //接收缓存区

RECV_BUFFER_SIZE, //缓冲区大小

0); //无标志

if(bytesRecv == 0)

{

printf("Connection Closed.\n");

break;

}

printf("Bytes Recv:%ld\n",bytesRecv);

}

//释放堆空间

HeapFree(GetProcessHeap(),0,recvbuf);

//关闭套接字

closesocket(clientService);

//清除WSA

WSACleanup();

return 0;

}

上面是一个简单的VC Socket 客户端程序,详细的注释都有。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐