套接字编程
套接字编程有三种:SOCK_STREAM、SOCK_DGRAM和Socket _ Raw。基于TCP的Socket编程采用SOCK_STREAM。基于UDP的数据报套接字(SOCK_DGRAM)。
1.TCP流套接字的编程步骤
使用前必须链接链接库功能:工程-->;设置-& gt;链接-& gt;输入ws2_32.lib,OK!
服务器端程序:
1,正在加载套接字库
2.创建一个套接字。
3.将套接字绑定到本地地址和端口。
4.将套接字设置为侦听模式,并准备接收客户请求(侦听)。
5.等待客户的要求到达;当请求到达时,接受连接请求并返回一个对应于这个连接的新套接字。
6.使用返回的套接字与客户端通信(send/recv)。
7.返回并等待另一个客户的请求。
8.关闭插座。
客户端程序:
1,正在加载套接字库
2.创建一个套接字。
3.向服务器发送连接请求。
4.与服务器通信(发送/接收)。
5.关闭插座
服务器端代码如下:
# include & ltWinsock2.h & gt//添加头文件
# include & ltstdio.h & gt//加载标准I/O头文件
void main()
{
WORD wVersionRequested//版本号
WSADATA wsaData
int err
wVersionRequested = make word(1,1);//1.1版本套接字
err = wsa startup(wVersionRequested,& ampwsa data);
如果(呃!= 0 ) {
返回;
}//加载套接字库,编辑失败返回。
if ( LOBYTE( wsaData.wVersion)!= 1 ||
HIBYTE( wsaData.wVersion)!= 1 ) {
WSACleanup();
返回;
}//如果不是1.1,则退出。
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建一个套接字。
SOCKADDR _ IN addrSrv
addrSrv.sin_addr。S_un。s _ addr = htonl(in addr _ ANY);//将无符号短整型转换为网络字节顺序格式。
addrSrv.sin _ family = AF _ INET
addr SRV . sin _ port = htons(6000);
bind(sockSrv,(SOCKADDR *)& amp;addrSrv,sizeof(SOCKADDR));
//将套接字绑定到本地地址和端口。
听(sockSrv,5);//将套接字设置为侦听模式,并准备接收客户端请求(侦听)。
SOCKADDR _ IN addrClient//定义地址族
int len = sizeof(SOCKADDR);//初始化这个参数,这个参数必须初始化。
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR *)& amp;addr client & amp;len);//accept的第三个参数必须有初始值。
//等待客户的要求;当请求到达时,接受连接请求并返回一个对应于这个连接的新套接字。
//程序此时被阻止在这里。
char send buf[100];
sprintf(sendBuf,"欢迎%s加入_ ntoa(addr client . sin _ addr));
//使用返回的套接字与客户端通信(send/recv)。
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n ",recvBuf);
close socket(sock conn);//关闭套接字。等待另一个用户请求
}
}
客户端代码如下:
# include & ltWinsock2.h & gt
# include & ltstdio.h & gt
void main()
{
WORD wVersionRequested
WSADATA wsaData
int err
wVersionRequested = make word(1,1);
err = wsa startup(wVersionRequested,& ampwsa data);加载套接字字体
如果(呃!= 0 ) {
返回;
}
if ( LOBYTE( wsaData.wVersion)!= 1 ||
HIBYTE( wsaData.wVersion)!= 1 ) {
WSACleanup();
返回;
}
SOCKET SOCK client = SOCKET(AF _ INET,SOCK_STREAM,0);创建一个套接字。
SOCKADDR _ IN addrSrv
addrSrv.sin_addr。S_un。s _ addr = inet _ addr(" 127 . 0 . 0 . 1 ");
addrSrv.sin _ family = AF _ INET
addr SRV . sin _ port = htons(6000);
connect(sockClient,(SOCKADDR *)& amp;addrSrv,sizeof(SOCKADDR));向服务器发送连接请求。
char recvBuf[100];并与服务器通信(send/recv)。
recv(sockClient,recvBuf,100,0);
printf("%s\n ",recvBuf);
send(sockClient,"这是lisi ",strlen("这是lisi")+1,0);
close socket(sock client);关闭插座。
WSACleanup();//必须调用此函数来清除参数。
}