📄 client.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 + -