client.c

来自「INTERNET网络高级编程的包括邮件加密、MAPI、ISAPI、ACTIVEX」· C语言 代码 · 共 81 行

C
81
字号
//客户端的应用程序
//

#include <winsock2.h>
#include <stdio.h>
#define DATA "hello,world!"

void main(argc,argv)
int argc;
char *argv[];
{
	int sockid; //socket号
	struct sockaddr_in server_addr; //服务器的地址结构
	struct hostent *hp; // 主机
    
	//////////以下代码是对socket版本号的处理////////////
    //进行协商
	WORD wVersionRequested;
	WSADATA wsaData;
	//使要求的版本为1.1
	int err;
	wVersionRequested=MAKEWORD(1,1);
	err=WSAStartup(wVersionRequested, &wsaData);
	if (err!=0)
	{
		//用户没有找到一个可以使用的DLL,返回
		perror("there is no DLL to use");
		return;
	}

	//确保Windows Sockets DLL支持1.1。
	if ( (LOBYTE(wsaData.wVersion)!=1) || (HIBYTE(wsaData.wVersion)!=1) )
	{
		perror("there is not right DLL");
		WSACleanup();
		return;
	}
	///////////socket版本号处理完毕////////////
	
	//建立Socket
	sockid=socket(AF_INET,SOCK_STREAM,0);
    if (sockid<0)
	{
		perror("there is error in opening stream socket,fuck you");
	    return;
	}
   	
	//得到命令行中指定的名字连接socket
	server_addr.sin_family=AF_INET;
    hp=gethostbyname(argv[1]);
	if(hp==0)
	{
       return;
	}
	memcpy((char *)&server_addr.sin_addr,(char *)hp->h_addr,hp->h_length);
	server_addr.sin_port=htons((unsigned short)atoi(argv[2]));
	
	//进行连接
	if(connect(sockid,(struct sockaddr*)&server_addr,sizeof(server_addr))<0)
	{
		perror("there is error in connecting stream socket");
		return;
	}

	//进行发送数据
	if ((send(sockid,DATA,sizeof(DATA),0))<0)
	{
		perror("there is error in sending the data");
        return;
	}
    else
	{
		printf("Sending successfully.");
	}
    
	//关闭socket
	closesocket(sockid);
	WSACleanup();
    return;
		
}

⌨️ 快捷键说明

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