社区
网络编程
帖子详情
socket接受数据问题。
taotao7805
2005-03-02 01:31:02
写个了socket通信程序,可是在接受端就是接受不到最后一次由发送端发送来的数据。发送端发两次只能接收到一次;发送端发三次只能接受到两次;如果只发送一次,就接受不到。这是为何?有没有人遇到过与我一样的问题?还希望有经验的朋友指点。
...全文
191
8
打赏
收藏
socket接受数据问题。
写个了socket通信程序,可是在接受端就是接受不到最后一次由发送端发送来的数据。发送端发两次只能接收到一次;发送端发三次只能接受到两次;如果只发送一次,就接受不到。这是为何?有没有人遇到过与我一样的问题?还希望有经验的朋友指点。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taotao7805
2005-03-03
打赏
举报
回复
up
aoosang
2005-03-03
打赏
举报
回复
Sleep(1000);将sleep的时间再加长一些,
我估计是你这端发送完了就将socket断开了,那边接收的socket处理数据慢,还没有接收完,你这边的socket就断开了,那天就肯定接收不到剩下的数据了
taotao7805
2005-03-02
打赏
举报
回复
估计是楼上的兄弟没有仔细看,我的代码就是在客户端而且也是用的非阻塞模式。所以你的建议。。。。。。
catyou
2005-03-02
打赏
举报
回复
不明白SetingSelect函数加入这一行select(0,&fdread,&fdwrite,NULL,NULL);是为什么??
一般select在client端比较多,但你既然是block的,就不需要这些了。去掉试试?
taotao7805
2005-03-02
打赏
举报
回复
服务器段发送一个数据过来,是不是客户端什么时候都能收到,这数据不会丢失?
taotao7805
2005-03-02
打赏
举报
回复
// EpgCore.cpp: implementation of the EpgCore class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "EpgClient.h"
#include "EpgCore.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
EpgCore::EpgCore()
{
host = NULL;
// memset(szBuff,0,DEFAULT_BUFFER);
strcpy(szBuff,"\0");
}
EpgCore::~EpgCore()
{
closesocket(sClient);
WSACleanup();
}
int EpgCore::initialize()
{
int iPort = DEFAULT_PORT;
WSADATA wsd;
struct sockaddr_in server;
unsigned long ul =1;
struct hostent *host = NULL;
tm.tv_sec = 5;
tm.tv_usec = 0;
if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
{
AfxMessageBox("initializing socke failed");
return -1;
}
sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(sClient == SOCKET_ERROR)
{
AfxMessageBox("socket() failed");
return -1;
}
server.sin_family = AF_INET;
server.sin_port = htons(iPort);
server.sin_addr.s_addr = inet_addr("192.168.136.102");//ip address
if(server.sin_addr.s_addr == INADDR_NONE)
{
host = gethostbyname("192.168.136.102");
if(host == NULL)
return -1;
CopyMemory(&server.sin_addr,host->h_addr_list[0],host->h_length);
}
if(connect(sClient,(struct sockaddr*)&server,sizeof(server)) == SOCKET_ERROR)
{
AfxMessageBox("connect() failed");
return -1;
}
//set noblock model
if (ioctlsocket(sClient, FIONBIO, &ul) == SOCKET_ERROR)
{
AfxMessageBox("ioctlsocket() failed");
return -1;
}
return 0;
}
void EpgCore::tick()
{
SetingSelect();
SendMessage();
RecvMessage();
}
int EpgCore::SetingSelect()
{
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_SET(sClient,&fdread);
FD_SET(sClient,&fdwrite);
select(0,&fdread,&fdwrite,NULL,NULL);
return 0;
}
int EpgCore::RecvMessage()
{
if(FD_ISSET(sClient,&fdread))
{
RecvRet = recv(sClient,szBuff,DEFAULT_BUFFER,0);
if(RecvRet == 0)
return -1;
else if (RecvRet == SOCKET_ERROR)
return -1;
szBuff[RecvRet] = '\0';
AfxMessageBox(szBuff);
if(strcmp("SIZE 551",szBuff) != 0)
FileOperate(szBuff);
}
return 0;
}
int EpgCore::SendMessage()
{
if(FD_ISSET(sClient,&fdwrite))
{
ret = send(sClient,"GETLIST",sizeof("GETLIST"),0);
if(ret == 0)
return -1;
if(ret == SOCKET_ERROR)
return -1;
Sleep(1000);
}
return 0;
}
void EpgCore::FileOperate(char *str)
{
CStdioFile file;
if(file.Open("D:\\epg.txt",CFile::modeReadWrite|CFile::typeText) == 0)
AfxMessageBox("open file failed!");
file.SeekToEnd();//从文件未开始写
file.WriteString(str);
// MessageBox(str);
file.WriteString("\n");
file.Close();
}
这是一个类,我用SendMessage()函数发送数据,可是我在另一断总是要少接受一次,也就是最后一次不能接受到。
xjtuzhw
2005-03-02
打赏
举报
回复
代码段贴出来
只靠说的甚么也看不出来呀
JasonHeung
2005-03-02
打赏
举报
回复
没有。检查你的接受函数,单步跟踪。
Java与C之间的
socket
通信
由于对web服务器编程了解较少,而且后台服务器已经采用原始
socket
实现与c客户端通信,这就要求Android客户端也采用
socket
实现。所以在开发Android app时采用了原始
socket
进行编程。 由于算法是用C语言
socket
发送
数据
与接收
数据
代码】
socket
发送
数据
与接收
数据
。
Socket
发送和接收
数据
我们来试验一下
socket
发送和
接受
数据
一共有三个文件:my
socket
.h、
socket
Server.c、
socket
Client.c 过程: 1.将这三个文件准备好,放到一个目录下 2.执行 gcc
socket
Server.c -o server.out 3.执行 gcc
socket
...
java
socket
大
数据
传输丢失的
问题
利用java 的
socket
进行
数据
传输时,当
数据
量过大,比如4w个字节。这时候我在客户端输出流将
数据
发送给服务器。服务器如果利用数组接收时(即is.read(byte[])方法),接收到的
数据
不全。网上解决方法。 一. 分批发送,...
java使用
Socket
类接收和发送
数据
通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和
接受
数据
。在本文及后面的数篇文章中将详细讨论
Socket
类的使用,内容包括
Socket
类基础、各式各样的连接方式、get和set方法、连接过程中的...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章