TCP套接字客户端

#pragma comment(lib,"ws2_32.lib")//Windows套接字动态链接库

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>

void main(int argc, char **argv)//将客户端的程序做得灵活一些,启动的时候使用命令行参数
{
	WSADATA       wsaData;//加载windows套接字及对套接字进行初始化
	SOCKET        s;
	SOCKADDR_IN   ServerAddr;
	int           Port = 5150;
	int           Ret;

	if(argc <= 1)//对命令行参数进行检查
	{
		printf("USAGE: TCPClinet <Server IP address>. \n");
//		system("pause");
	}

	if((Ret = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0)
	{
		printf("WSAStartup failed with error %d\n", Ret);
		return;
	}

	if((s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)
	{
	    printf("socket failed with error %d\n", WSAGetLastError());
		WSACleanup();
		return;
	}

	ServerAddr.sin_family = AF_INET;
	ServerAddr.sin_port = htons(Port);//主机字节顺序转化为网络字节顺序
	ServerAddr.sin_addr.S_un.S_addr = inet_addr(argv[1]);
	printf("we are trying to connect to %s:%d...\n",inet_ntoa(ServerAddr.sin_addr),htons(ServerAddr.sin_port));

	if(connect(s,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr)) == SOCKET_ERROR)
	{
		printf("connect failed with error %d\n", WSAGetLastError());
		closesocket(s);
		WSACleanup();
		return;
	}

	printf("we will now try to send message. \n");


	if((Ret = send(s,"hello",5,0)) == SOCKET_ERROR)//send第4个参数为flags;若为0则和write一样。
	{
		printf("send failed with error %d\n", WSAGetLastError());
		closesocket(s);     
    	WSACleanup();
		return;
	}
		
	printf("we successfully sent %d bytes. \n", Ret);
	closesocket(s);     
    WSACleanup();

	system("pause");

}

先开启服务端,再开启客户端。
在这里插入图片描述

发布了10 篇原创文章 · 获赞 0 · 访问量 2361

猜你喜欢

转载自blog.csdn.net/qq_42250189/article/details/104516259