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

📄 client.c

📁 winsock programs for TCP and UDP
💻 C
字号:
//File Name: Client.c
//客户程序发送报文,然后接收主机交换IP地址和UDP端口号的报文
//命令行格式:client 主机名 端口号
#include "winsock.h"
#include "stdio.h"
#pragma comment(lib,"wsock32")


main( int argc, char *argv[] )
{
	WSADATA WSAData;
	int sock;
	struct sockaddr_in cliaddr;
	struct sockaddr_in srvaddr;
	struct hostent *hp;
	char send_message[100];
	char recv_message[100];

	//命令行参数不能少于4个(client 主机名 端口号 消息字符串)
	if ( argc < 4 )
	{
		printf("usage: client server_host server_port msg_string\n");
		exit(0);
	} 

	//初始化Ws2_32.dll
	WSAStartup(MAKEWORD(1,1),&WSAData);

	//建立套接字
	sock = socket( AF_INET, SOCK_STREAM, 0 );
	if ( sock < 0 ) 
	{
		perror( "opening stream socket" );
		exit( 1 );
	}
	
	//创建地址
	cliaddr.sin_family = AF_INET;
	cliaddr.sin_addr.s_addr = 0x7F000001;
	srvaddr.sin_family = AF_INET;

	//得到服务器名
	hp = gethostbyname( argv[1] );
	if ( hp == 0 ) {
		fprintf( stderr, "%s: unknown host\n", argv[1] );
		exit( 3 );
	}

	//连接服务器
	memcpy( (char *)&srvaddr.sin_addr, (char *)hp->h_addr, hp->h_length );
	srvaddr.sin_port = atoi(argv[2]);
	if ( connect( sock, (struct sockaddr *)&srvaddr, sizeof(srvaddr) ) < 0 ) {
		perror( "connecting stream socket" );
		exit( 4 );
	}

	//发送消息到服务器
	strcpy( send_message, argv[3] );
	
	if (send(sock, send_message, 100, 0) < 0) perror("send");

	//从服务器接收消息
	if ( recv(sock, recv_message, 100, 0) < 0) perror("recv");
	printf("receive: %s\n", recv_message);
	
	//关闭套接字	
	closesocket( sock );
	exit( 0 );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -