📄 client.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")
#define MAX_SEND_BUFFER 4096
bool check_src_port; // 标识是否指定了客户端发起连接的端口
unsigned int server_port;
unsigned int client_port;
char server_ip[30];
void usage()
{
printf("usage: client [dest_ip] [dest_port] [src_port]\n\n");
printf(" dest_ip : 服务器地址\n");
printf(" dest_port : 服务器端口\n");
printf(" src_port : 客户端发起连接的端口,不指定即随即选取\n");
exit(1);
}
void ParseCmd(int argc, char **argv)
{
if(argc < 3 || argc > 4)
{
usage();
}
else if(argc == 3)
{
check_src_port=false;
strcpy(server_ip,argv[1]);
server_port=atoi(argv[2]);
}
else
{
check_src_port=true;
strcpy(server_ip,argv[1]);
server_port=atoi(argv[2]);
client_port=atoi(argv[3]);
}
}
int main(int argc, char **argv)
{
WSADATA wsd;
SOCKET client_sock;
char sendBuffer[MAX_SEND_BUFFER];
int ret;
struct sockaddr_in server;
struct sockaddr_in local;
struct hostent *host = NULL;
ParseCmd(argc, argv);
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("加载Winsock失败!\n");
return 0;
}
client_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (client_sock == INVALID_SOCKET)
{
printf("创建客户端socket失败: %d\n", WSAGetLastError());
return 0;
}
// 设置服务器相关参数
server.sin_family = AF_INET;
server.sin_port = htons(server_port);
server.sin_addr.s_addr = inet_addr(server_ip);
if(check_src_port==true) // 设定客户端发起连接的端口
{
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(client_port);
if (bind(client_sock, (struct sockaddr *)&local,
sizeof(local)) == SOCKET_ERROR)
{
printf("绑定客户端端口失败: %d\n", WSAGetLastError());
return 0;
}
}
// 客户端发起连接
if (connect(client_sock, (struct sockaddr *)&server,
sizeof(server)) == SOCKET_ERROR)
{
printf("连接服务器失败: %d\n", WSAGetLastError());
return 1;
}
printf("连接上服务器 %s\n",server_ip);
// 向服务器发送信息
while(1)
{
printf("请输入要发送的信息:");
gets(sendBuffer);
ret = send(client_sock, sendBuffer, strlen(sendBuffer),0);
if(ret == 0)
{
break;
}
else if (ret == SOCKET_ERROR)
{
printf("发送失败: %d\n", WSAGetLastError());
break;
}
}
closesocket(client_sock);
WSACleanup();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -