#include <winsock2.h>
#include<stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
WSADATA wsaData;
WSAStartup(WINSOCK_VERSION,&wsaData);
SOCKET sock = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in to;
memset(&to, 0 , sizeof(to));
to.sin_addr.s_addr = inet_addr("92.0.0.27");//服务器程序在本地
to.sin_family = AF_INET;
to.sin_port = htons(8888); //server 的 PORT
int ret = connect(sock, (struct sockaddr*) &to, sizeof(to));
char connectChar[] = "92.0.0.27@#SEND@#92.0.0.27@#SEND@#10@#0@#1@#A@#\n";
send(sock, connectChar,strlen(connectChar),1);
char sendData[] = "92.0.0.27@#SEND@#92.0.0.27@#RECV@#0@#0@#7@#abcdefg@#\n";
int flag = 0;
while(1)
{
int retSend = send(sock, sendData,strlen(sendData),0);
if(retSend == SOCKET_ERROR)
{
break;
closesocket(sock);
}
else
{
//printf("%s",sendData);
printf("%d\n",flag++);
}
}
printf("sdfsdfsdfsdddddddddddddddd");
WSACleanup();
return 0;
}客户端编程的一个小问题,为什么发送数据的时候发送1000多条的时候程序不运行了
这里我将flag跟踪,当flag变到1239时,程序好像出现了一些想不到的错误,在flag
变成1239次时,也就是说客户端往服务器发送了1000多条数据后,程序停在了while循环中
因为我并没有看到printf("sdfsdfsdfsdddddddddddddddd“);这条程序的执行,调试程序我将断点设在printf("sdfsdfsdfsdddddddddddddddd),也是没有运行到
请问这是怎么回事,服务我该怎么样调试这样的程序
谢谢
#include<stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
WSADATA wsaData;
WSAStartup(WINSOCK_VERSION,&wsaData);
SOCKET sock = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in to;
memset(&to, 0 , sizeof(to));
to.sin_addr.s_addr = inet_addr("92.0.0.27");//服务器程序在本地
to.sin_family = AF_INET;
to.sin_port = htons(8888); //server 的 PORT
int ret = connect(sock, (struct sockaddr*) &to, sizeof(to));
char connectChar[] = "92.0.0.27@#SEND@#92.0.0.27@#SEND@#10@#0@#1@#A@#\n";
send(sock, connectChar,strlen(connectChar),1);
char sendData[] = "92.0.0.27@#SEND@#92.0.0.27@#RECV@#0@#0@#7@#abcdefg@#\n";
int flag = 0;
while(1)
{
int retSend = send(sock, sendData,strlen(sendData),0);
if(retSend == SOCKET_ERROR)
{
break;
closesocket(sock);
}
else
{
//printf("%s",sendData);
printf("%d\n",flag++);
}
}
printf("sdfsdfsdfsdddddddddddddddd");
WSACleanup();
return 0;
}客户端编程的一个小问题,为什么发送数据的时候发送1000多条的时候程序不运行了
这里我将flag跟踪,当flag变到1239时,程序好像出现了一些想不到的错误,在flag
变成1239次时,也就是说客户端往服务器发送了1000多条数据后,程序停在了while循环中
因为我并没有看到printf("sdfsdfsdfsdddddddddddddddd“);这条程序的执行,调试程序我将断点设在printf("sdfsdfsdfsdddddddddddddddd),也是没有运行到
请问这是怎么回事,服务我该怎么样调试这样的程序
谢谢
closesocket(sock);
closesocket()永远执行不了。到不了printf是因为卡在while里了。while中只有可能卡在send。你的循环是连续执行的,没有间隔,所以很可能是发的太快了,发送速度超过了服务器读取的速度,接收窗口收缩为0。不过即使这样的话,当服务器喘口气的时候窗口也会慢慢打开一点,不至于完全死住。楼主可以观察时间长点,看看是完全死住了,还是执行很慢而已,估计很可能后者。不然的话,就是服务器段累死掉了。建议在两次发送之间加延时,sleep(100)
可是现在我的服务器程序好像没有错误
我对send后的结果进行检测,每次当发送到1239时,程序确实是卡在了send上,这时程序不在执行了
当我将服务器程序关掉后,后面的就可以执行了
请问这是我的服务器程序出错了吗?
我这可是加上了sleep了而实现同样功能的vb程序,却可以运行一天,这是我的服务器程序出问题了吗?
请问该怎么解决
难道是我的服务程序当掉了吗?
不会啊
在卡在send的时候,我使用vb的客户端去访问服务器
还是可以的
这到底是怎么回事
还有你检查一下服务器端的接收情况,照你的程序看,很可能是服务器端接收的时候遇到了问题,从而使接收窗口不能变大,导致客户端不能发送数据。
是可以接受数据的,这是不是说明我的服务器程序是没有问题的
服务器端是使用完成端口来做的,
我将客户端发送的时间间隔调成一秒都不行
为什么?
是怎么回事
实在是调不出来