浏览量 3
1.创建套接字socket();
2.地址,端口,监听设置。
3.接受连接请求accerpt();
4.发送数据send();
5.接受数据recv();
6.关闭closesocket();
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")//去ws2_32.lib库查找
int main()
{
WORD wVersionRequested;
WSADATA wsaData;//用来接收windows socket的结构信息的
int err;
wVersionRequested = MAKEWORD(1,1);//使用1.1版本的socket库
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
printf("error");
return -1;//返回值为零的时候表示成功申请了WSAStartup
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
//检查低字节与高字节是不是确定是1,确定我们所请求的版本
//否则,调用WSACleanup()清除信息,结束函数
// printf("error");
WSACleanup();
return -1;
}
//创建套接字,返socket操作,建立流式回套接字号sockSrv
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
//套接字socksrv与本地地址相连
SOCKADDR_IN addrSrc;
addrSrc.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//将inaddr_any转换为网络字节序,调用htonl(long型)或htons(int型)
addrSrc.sin_family=AF_INET;//地址族
addrSrc.sin_port=htons(6000);//端口
bind(sockSrv,(SOCKADDR*)&addrSrc,sizeof(SOCKADDR));
//将套接字设置为监听模式,listen()通知tcp服务器准备好接收连接
listen(sockSrv,10);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
//等待客户端的请求
while(true)
{
//accept()接受连接,等待客户端连接
// SOCKET accept( SOCKET s, struct sockaddr* addr, int* addrlen);
// 第一个参数,接收一个处于监听状态下的套接字
// 第二个参数,sockaddr用于保存客户端地址的信息
// 第三个参数,用于指定这个地址的长度
// 返回的是向与这个监听状态下的套接字通信的套接字
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
//客户端与服务端进行通信
// send(), 在套接字上发送数据
// int send( SOCKET s, const char* buf, int len, int flags);
// 第一个参数,需要发送信息的套接字,
// 第二个参数,包含了需要被传送的数据,
// 第三个参数是buffer的数据长度,
// 第四个参数,一些传送参数的设置
// recv(), 在套接字上接收数据
// int recv( SOCKET s, char* buf, int len, int flags);
// 第一个参数,建立连接后的套接字,
// 第二个参数,接收数据
// 第三个参数,接收数据的长度,
// 第四个参数,一些传送参数的设置
char sendBuf[100];//缓冲
printf(sendBuf,"welcome to the server program,let's start talking...\n",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
char * sockConnName="Client";
printf("可以聊聊");
int n=5;
while(n--)
{
printf("还剩%d次:\n",n+1);
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s Says: %s\n", sockConnName, recvBuf);
char talk[100];
printf("Please enter what you want to say next(\"quit\"to exit):");
gets(talk);
send(sockConn,talk,strlen(talk)+1,0);
printf("\n");
}
printf("end");
closesocket(sockConn);//关闭
}
printf("\n");
// system("pause");
return 0;
}