套接字:“协议,地址,端口号”三元组的标识
服务器工作过程
1 定义套接字;2设置侦听端口(三元组);3把侦听端口与套接字绑定;4侦听;5接受连接,与连接套接字绑定;6发送或接收数据;7关闭套接字;
/*服务器程序*/
#pragma comment(lib,"ws2_32.lib")
#include
#include
#include
void main()
{
WSADATA wsaData;
SOCKET listens,connects; //定义两个套接字,监听和连接套接字SOCKADDR_IN saddr,caddr;//两个三元组(地址,协议,端口)结构
char recvb[100]; //接收缓冲区
int port=5150; //端口号
WSAStartup(MAKEWORD(2,2),&wsaData);/*绑定找到的Socket 库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。*/
listens=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建套接字
saddr.sin_family=AF_INET;//TCP/IP协议
saddr.sin_port=htons(port);//置端口
saddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//本机地址
int len1=sizeof(SOCKADDR);//地址长度
bind(listens,(SOCKADDR*)&saddr,len1);//套接字绑定三元组
listen(listens,5);//监听
connects=accept(listens,(SOCKADDR*)&caddr,&len1);//接受连接recv(connects,recvb,100,0);//接受数据
printf("\n%s\n",recvb);
closesocket(listens);closesocket(connects);//关闭套接字
WSACleanup();//释放socket库
}
客户机工作过程
1 定义套接字;
2 用套接字连接服务器;3发送或接收数据;4关闭套接字
#pragma comment(lib,"ws2_32.lib")
#include
#include
#include
void main()
{
WSADATA wsaData;
SOCKET s;
SOCKADDR_IN saddr;
int port=5150;
WSAStartup(MAKEWORD(2,2),&wsaData);
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建TCP 套接字
saddr.sin_family=AF_INET;
saddr.sin_port=htons(port);
saddr.sin_addr.S_un.S_addr=inet_addr("218.76.212.10");
connect(s,(SOCKADDR*)&saddr,sizeof(SOCKADDR));//请求连接char sendbuff[100];
sprintf(sendbuff,"Hello!");
send(s,sendbuff,strlen(sendbuff),0);//传送数据
closesocket(s);
WSACleanup();
}