#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");
}
先开启服务端,再开启客户端。