社区
C++ Builder
帖子详情
socket 问题 win98 与 win2000是如此的不同。
gpg
2002-01-25 04:32:38
我有一文件传输程序,基于winsock写的。9x与9x可以,2000与2000也是好的。
但2000向98传或98向2000传就不行了。怎么回事啊?
...全文
76
10
打赏
收藏
socket 问题 win98 与 win2000是如此的不同。
我有一文件传输程序,基于winsock写的。9x与9x可以,2000与2000也是好的。 但2000向98传或98向2000传就不行了。怎么回事啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gpg
2002-03-14
打赏
举报
回复
快50天了,先放一放。忙别的事。
结帐,来者有分。
我不懂电脑
2002-03-13
打赏
举报
回复
三十年孤独之饱经沧桑自由聊天没有这样的bug
LuoGD
2002-03-12
打赏
举报
回复
我用API做的没问题,WINDOWS<--->UNIX也可以
常宁
2002-03-12
打赏
举报
回复
我做的没有问题,不知你用的Socket如何实现的,API,TcustomSocket,Tpowersocket?
gpg
2002-03-12
打赏
举报
回复
文件接受
DWORD WINAPI SocketService( LPVOID _Param)
{
TThreadParams* InputParam=(TThreadParams*)_Param;
SOCKET ClientSocket;
char SendBuffer[4096];
fd_set Readfds;
FILE * pFile;
int RetCode=0,HeaderSize=sizeof(TIPHeader);
TIPHeader Header;
unsigned PackageIndex=1;
bool Continue=true,Continued=true;
struct timeval TimeOut={60,0};
while(WaitForSingleObject(InputParam->StopEvent,0)!=WAIT_OBJECT_0)
{
ClientSocket=accept(InputParam->ListenSocket,NULL,NULL);
if(ClientSocket==INVALID_SOCKET)
return 1;
if((pFile=fopen("D:\\AAAA.RAR", "w+b"))==NULL)
return 1;
FD_SET(ClientSocket,&Readfds);
while(Continue)
{
while(Continued)
{
FD_SET(ClientSocket,&Readfds);
if(select(0,&Readfds,NULL,NULL,&TimeOut)<1)
{
Continue=false;
break;
}
memset(SendBuffer,'\0',4096);
RetCode=recv(ClientSocket,SendBuffer,4096,0); //服务器接受
if(RetCode<1)
{
Continue=false;
Continued=false;
}
else
Continued=false;
}
Continued=true;
memcpy(&Header,SendBuffer,HeaderSize);
if(Header.PackageSequence==PackageIndex)
{
Header.PackageSequence=PackageIndex+1;
Header.PackageType=ACK;
Continue=true;
fwrite((SendBuffer+HeaderSize),Header.DataPackageSize,1,pFile); //写文件
memcpy(SendBuffer,&Header,HeaderSize);
send(ClientSocket,SendBuffer,4096,0); //服务器发送
}
PackageIndex+=1;
}
fclose(pFile);
closesocket(ClientSocket);
MessageBox(0,"Server","Prompt",MB_OK);
}
return 0;
}
发送
void __fastcall TMainForm::SendFile(AnsiString filename)
{
SOCKET ClientSocket;
struct sockaddr_in Server;
char SendBuffer[4096],RecvBuffer[4096];
fd_set Readfds;
FILE * pFile;
bool Continue=true,Continued=true;
int RetCode=-1,HeaderSize=sizeof(TIPHeader);
unsigned PackageIndex=1;
struct timeval TimeOut={60,0};
TIPHeader Header;
try
{
if((pFile=fopen(filename, "rb"))==NULL)
return;
memset(&Server,0,sizeof(Server));
Server.sin_family=AF_INET;
Server.sin_port=htons(8000);
Server.sin_addr.S_un.S_addr= inet_addr("61.134.18.158");
ClientSocket=socket(AF_INET,SOCK_STREAM,0);
if(ClientSocket==INVALID_SOCKET)
return;
if(connect(ClientSocket,(struct sockaddr*)&Server,sizeof(Server))==SOCKET_ERROR)
return;
FD_SET(ClientSocket,&Readfds);
PackageIndex=1;
Continue=true;
while(Continue)
{ //4048
memset(SendBuffer,'\0',4096);
RetCode=fread((SendBuffer+HeaderSize), 1, 4048, pFile); //读文件
if(RetCode<1)
{
Continue=false;
Continued=false;
}
while(Continued)
{
Header.PackageSequence=PackageIndex;
Header.PackageType=DATAPACKAGE;
Header.DataPackageSize=RetCode;
memcpy(SendBuffer,&Header,HeaderSize);
send(ClientSocket,SendBuffer,4096,0); //客户端发送
FD_SET(ClientSocket,&Readfds);
select(0,&Readfds,NULL,NULL,&TimeOut);
if(recv(ClientSocket,RecvBuffer,4096,0)<1) //客户端接受
{
Continue=false;
break;
}
memcpy(&Header,RecvBuffer,HeaderSize);
if(Header.PackageSequence!=(PackageIndex+1))
Continued=true;
else
Continued=false;
}
PackageIndex+=1;
Continued=true;
}
ClientLog->Lines->Add(AnsiString(SendBuffer));
closesocket(ClientSocket);
fclose(pFile);
MessageBox(0,"Client","Prompt",MB_OK);
}catch(...)
{
fclose(pFile);
}
}
gpg
2002-03-12
打赏
举报
回复
文件接受
gpg
2002-01-26
打赏
举报
回复
up++
gpg
2002-01-25
打赏
举报
回复
我用的是 Berkeley Socket风格
gpg
2002-01-25
打赏
举报
回复
xiaoxiaohan 不是的。
另,我没有用任何组件。
xiaoxiaohan
2002-01-25
打赏
举报
回复
看一看是不是UNICODE的问题。
13. 如何在Unicode与ANSI之间转换字符串?
Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。
VNC使用教程.pdf
VNC使用教程.pdf
SQL数据库校选课作业
1、SQL SERVER服务器的网库配置为TCP/IP
socket
,但使用1450作为端口。请问如何配置网库使访问成功: A、 At the server use the Network utility to use port 1450 B、 At the server use the Client utility to use port 1450 C、 At the Client configure the Client utility to use port 1450 2、 NT的SQLGROUP的成员连接SQL不能成功,经检查其default Net-Library是Named Pipes.最可能的原因是: A、 用户计算机上没有配置有效的ODBC DSN For SQL Server. B、 用户计算机没有同SQL Server.计算机建立可信连接 C、 SQL Server.数据库文件没有共享到网络上 D、
Win
dows NT的Guest用户被禁用 3、 你用QQL的身份安装了SQL
2000
,两个星期后,SQL Server.不能启动,最可能的原因是: A、 QQL没有管理员权限 B、 QQL的密码过期 C、 机器没有安装网卡 D、 以上都不对
宇泰嵌入式联网模块的介绍与应用
当今工业以太网的发展,由于传输速度、传输可靠性及可扩展性等综合性能方面的优越性,越来越多的数据采集系统都是用于以太网接口,并且越来越多的仪器仪表设备也提供了以太网接口,但是有很多早期的设备一般使用串口、RS232、RS485方式进行数据通信已不再适应信息化的步伐,因此需要一种简单、高效、易于扩充的集
ndows
98
驱动,
Win
dows
98
/
2000
驱动程序编写方法
标签:
Win
dows
98
Win
dows
98
2000
驱动程序编写方法
Win
dows
98
Win
dows
98
/
2000
驱动程序编写方法1. 驱动程序的开发环境对于VxD的开发,需要的开发环境是:Visual C++ 5.0/6.0
Win
dosw 95DDK 如果想加快开发步骤,建议使用第三方的VToolsD开发工具,它将DDK的东西全部封装成C++的类,可以直接用Visual C...
Linux基本命令
linux 操作系统 一.linux 操作系统概述 1.常见操作系统 - 服务端操作系统 : linux、unix、
win
dows server - 单机操作系统 :
win
dows(dos 、ucdos、
win
95、
win
98
、
win
2000
、xp、vista、
win
7、
win
8) MAC 、linux(ubuntu) -...
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章