⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.cpp

📁 linux socket通信客户端例程 实现与服务器的通信
💻 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 + -