说明:实现简单的TCP网络连接。
—————————————-服务器—————————————-
文件名称:Server.c
运行方式:命令行
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
int main(int argc,char *argv[])
{
WSADATA wsaData;
SOCKET ServSock,ClntSock;
SOCKADDR_IN ServAddr,ClntAddr;
int szClntAddr;
char message[]="hello world!";
if(argc!=2)
{
printf("Please input <port>:%s \n",argv[0]);
exit(1);
}
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
printf("WSAStartup() error!\n");
ServSock=socket(AF_INET,SOCK_STREAM,0);
if(ServSock==INVALID_SOCKET)
printf("socket() error!\n");
memset(&ServAddr,0,sizeof(ServAddr));
ServAddr.sin_family=AF_INET;
ServAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
ServAddr.sin_port=htons(atoi(argv[1]));
if(bind(ServSock,(SOCKADDR *)&ServAddr,sizeof(ServAddr))==SOCKET_ERROR)
printf("bind() error!\n");
if(listen(ServSock,5)==SOCKET_ERROR)
printf("listen() error!\n");
szClntAddr=sizeof(ClntAddr);
ClntSock=accept(ServSock,(SOCKADDR *)&ClntAddr,&szClntAddr);
if(ClntSock==INVALID_SOCKET)
printf("accept() error!\n");
send(ClntSock,message,sizeof(message),0);
closesocket(ClntSock);
closesocket(ServSock);
WSACleanup();
return 0;
}
—————————————-客户端—————————————-
文件名称:Client.c
运行方式:命令行
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
int main(int argc,char *argv[])
{
WSADATA wsaData;
SOCKET ClntSock;
SOCKADDR_IN ServAddr;
char message[30];
int n;
if(argc!=3)
{
printf("Please input <IP> <Port> :%s\n",argv[0]);
exit(1);
}
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
printf("WSAStartup() error!\n");
/*
关于AF_INET与PF_INET说明
1.在windows中的winsock2.h文件中:
#define PF_INET AF_INET
即:AF_INET与PF_INET是等价的,都表示IPv4。
2.Unix/Linux系统中,在不同的版本中这两者有微小差别。对于BSD是AF,对于POSIX是PF。但是也可以混合使用,只是不符合相关规范。
*/
ClntSock=socket(AF_INET,SOCK_STREAM,0);
if(ClntSock==INVALID_SOCKET)
printf("socket() error!\n");
memset(&ServAddr,0,sizeof(ServAddr));
ServAddr.sin_family=AF_INET;
ServAddr.sin_addr.S_un.S_addr=inet_addr(argv[1]);
ServAddr.sin_port=htons(atoi(argv[2]));
if(connect(ClntSock,(SOCKADDR *)&ServAddr,sizeof(ServAddr))==SOCKET_ERROR)
printf("connect() error!\n");
n=recv(ClntSock,message,sizeof(message),0);
if(n==-1)
printf("Read the Server Data faild!\n");
else
printf("Message from Server: %s\n",message);
closesocket(ClntSock);
WSACleanup();
return 0;
}