
线程函数里使用循环可以实现不停的发每发一次sleep(5000)5秒然后再次循环。你创建两个线程 之后运行线程即可,线程的运行切换由 *** 作系统CPU自己调度,不用手动切换,记住现在的 *** 作系统都是多线程抢占式的。
如果Server端死掉,客户端会捕获到一个服务退出的异常,你可以根据异常来处理。
至于代码,百度下,很多。
希望能帮到你,感谢!
用数组,每个链接做标记。struct LINK{
int id
time_t lastcheck
flag //1-有数据提交,0-无数据提交
}
在一个定时器过程里对这个数组进行扫描,并重置lastcheck值
我选的第一题,TCP通信
服务器代码:
#include "stdafx.h"
#include<Winsock2.h>
#pragma comment(lib,"WS2_32.lib")
int main(int argc, char* argv[])
{
WORD wVersionRequested
WSADATA wsaData
int err
wVersionRequested = MAKEWORD( 2, 2 )
err = WSAStartup( wVersionRequested, &wsaData )
if ( err != 0 )
{
return -1
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( )
return -1
}
//这之上的是必须的
SOCKET sockSer = socket(AF_INET,SOCK_STREAM,0) //TCP套接字
SOCKADDR_IN AddrSer
AddrSer.sin_family=AF_INET
AddrSer.sin_port=htons(6666)
AddrSer.sin_addr.S_un.S_addr= inet_addr("127.0.0.1")//本机地址
int ret = bind(sockSer,(SOCKADDR *)&AddrSer,sizeof(SOCKADDR_IN))
if(ret!=0)
return -1
listen(sockSer,5)
SOCKADDR_IN AddrClient
int len=sizeof(SOCKADDR_IN)
SOCKET sockLink=accept(sockSer,(SOCKADDR *)&AddrClient,&len)
int i=0 char buf[50]
while(1)
{
memset(buf,0,50)
recv(sockLink,buf,50,0)
printf("%s\n",buf) //将得到的字符串输出(可不要)
i=strlen(buf) //得到字符串长度
memset(buf,0,50)
sprintf(buf,"%d",i) //将int类型i写入char类型buf中
send(sockLink,buf,strlen(buf)+1,0) //发送长度buf
}
closesocket(sockLink) closesocket(sockSer)
return 0
}
客户端代码:
#include "stdafx.h"
#include<Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
WORD wVersionRequested
WSADATA wsaData
int err
wVersionRequested = MAKEWORD( 2, 2 )
err = WSAStartup( wVersionRequested, &wsaData )
if ( err != 0 )
{
return -1
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( )
return -1
}
SOCKET sockClient= socket(AF_INET,SOCK_STREAM,0)
SOCKADDR_IN addr_ser
addr_ser.sin_family=AF_INET
addr_ser.sin_port=htons(6666)
addr_ser.sin_addr.S_un.S_addr=inet_addr("127.0.0.1")
int ret = connect(sockClient,(SOCKADDR*)&addr_ser,sizeof(addr_ser))
if(ret!=0)
return -1
char buf[50]
int i=0
while(1)
{
memset(buf,0,50)
gets(buf) //输入字符串
if(strcmp(buf,"再见")==0)
{
break
}
else
{
send(sockClient,buf,strlen(buf)+1,0)
memset(buf,0,50)
recv(sockClient,buf,50,0)
printf("%s\n",buf)
}
}
closesocket(sockClient)
return 0}
客户端运行结果:
运行时要先运行服务器,在运行客户端。有为题追问吧~~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)