📄 client_notes.c
字号:
/****************************************************
*Windows环境下使用VC编写的TCP通信客户端程序
*在编译这个程序时,需要在工程设置项目--〉连接项目中添加如下两项:
* Ws2_32.lib和Winmm.lib
*否则编译后链接生成可执行文件时会出错!
*客户端程序在单机内的测试运行方法:
* client 主机名 端口号
*
*程序中的函数列表:
*int InitSockets(void): 插口(套接字)初始化
****************************************************/
#include <stdio.h>
#include <winsock2.h>
int InitSockets(void)
{
WSADATA wsaData;
WORD wVersionRequested;
int err;
/* Ask for Winsock 1.1 functionality */
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
printf("Error %d: Winsock not available\n", err);
return 1;
}
return 0;
}
#define WSA_ERROR(x) { printf("Error %d: %s\n", \
WSAGetLastError(), x); return 1; }
//void InitSockets(void);
main(int argc, char **argv)
{
SOCKET sd_client;
int err;
u_short iPort;
struct sockaddr_in addr_srv;
struct hostent *ptrHost;
char response[4096];
char *pszHost;
char *msg = "HELLO SERVER";
if (argc == 3) {
pszHost = argv[1];
iPort = atoi(argv[2]);
}
else {
printf("Usage:\t client1 [hostname] [portno]");
return 1;
}
InitSockets(); //初始化socket
sd_client = socket(PF_INET, SOCK_STREAM, 0); //按参数要求申请的socket给sd_client
if (sd_client == INVALID_SOCKET) //检错
WSA_ERROR("no more socket resources")
//输入了数字格式的主机名,则直接转换,否则通过gethostbyname获取主机IP
if (atoi(pszHost)) {
u_long ip_addr = inet_addr(pszHost);
ptrHost = gethostbyaddr((char *)&ip_addr,
sizeof(u_long), AF_INET);
}
else
ptrHost = gethostbyname(pszHost);
if (!ptrHost)
WSA_ERROR("cannot resolve hostname")
addr_srv.sin_family = PF_INET;
memcpy((char *) &(addr_srv.sin_addr),
ptrHost->h_addr, ptrHost->h_length);
addr_srv.sin_port = htons(iPort);
//向服务器发出连接请求
err = connect(sd_client, (struct sockaddr *) &addr_srv,
sizeof(addr_srv));
if (err == INVALID_SOCKET)
WSA_ERROR("cannot connect to server")
printf("You are connected to the server\n");
//连接上后,向服务器发出服务请求
send (sd_client, msg, strlen(msg)+1, 0);
memset(response, 0, sizeof(response));
//接收服务器返回的服务信息
recv(sd_client, response, sizeof(response), 0);
printf("server says %s\n", response);
closesocket(sd_client);
WSACleanup();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -