首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于socket数据接收发送的问题 [已结帖,结帖人:tody_guo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tody_guo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-23 23:07:15 楼主

    关于这个问题自己也想了很多,现在的问题就是如果我要发送的字节数量超过了send或recv的BUF的大小时,我剩下的数据怎么让它继续的传输或接收到。
    希望能得到大侠的指点。
    谢谢先!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • 060
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 23:17:171楼 得分:5
    将数据分成许多块, 每次send一块,

    将recv放在while(1)里, 直到recv的返回值 <=0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenfeng2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 23:22:272楼 得分:0
    可以自己为要传送的一份数据打个包,发送过程拆分包,接收过程重组包。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • YFY
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 09:42:503楼 得分:0
    发送时分包发送【可按1024字节】,接收时也是分包接收【可按1024字节】。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chlaws
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 10:31:464楼 得分:0
    分段发送咯
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • csgdseed
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 11:30:435楼 得分:0
    发送时有限制的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iambic
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      4

      3

    发表于:2008-08-24 11:32:276楼 得分:0
    socket是流式的,一直发就是了。不会管你是分几次发的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • manio
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 12:45:577楼 得分:15
    VC的一个SOCKET发送类

    C/C++ code
    // MSocket.h: interface for the MSocket class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_MSOCKET_H__173986E0_9B3F_45BC_BD5E_D2510290E3FA__INCLUDED_) #define AFX_MSOCKET_H__173986E0_9B3F_45BC_BD5E_D2510290E3FA__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <windows.h> #include <iostream.h> #include <winsock.h> #define NO_FLAGS_SET 0 /////////////////////////////////////////////// //MSocket is as a TCP client //it connect to host to send and recv data /////////////////////////////////////////////// class MSocket { public: int recvData(char *mdata, int msize); bool disconnectFromHost(); bool sendData(char *mdata, int msize); bool connectToHost(); MSocket(char *destip, u_short destport); virtual ~MSocket(); private: char m_DestIp[32]; u_short m_DestPort; WSADATA Data; SOCKADDR_IN destSockAddr; SOCKET destSocket; unsigned long destAddr; int status; int numsnt; }; #endif // !defined(AFX_MSOCKET_H__173986E0_9B3F_45BC_BD5E_D2510290E3FA__INCLUDED_)



    C/C++ code
    // MSocket.cpp: implementation of the MSocket class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "MSocket.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// MSocket::MSocket(char *destip, u_short destport) { strcpy(m_DestIp, destip); m_DestPort = destport; /* initialize the Windows Socket DLL */ status=WSAStartup(MAKEWORD(1, 1), &Data); if (status != 0) cerr << "ERROR: WSAStartup unsuccessful" << endl; /* convert IP address into in_addr form */ destAddr=inet_addr(m_DestIp); /* copy destAddr into sockaddr_in structure */ memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr)); /* specify the port portion of the address */ destSockAddr.sin_port=htons(m_DestPort); /* specify the address family as Internet */ destSockAddr.sin_family=AF_INET; } MSocket::~MSocket() { } bool MSocket::connectToHost() { /*掉线后要重新获取SOCKET,才能重连上,一次连接一个SOCKET*/ /* create a socket */ destSocket=socket(AF_INET, SOCK_STREAM, 0); if (destSocket == INVALID_SOCKET) { cerr << "ERROR: socket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return false; } cout<<"MSocket initialized sucessfully!"<<endl; cout << "Trying to connect to IP Address: " << m_DestIp << endl; /* connect to the server */ status=connect(destSocket, (LPSOCKADDR) &destSockAddr, sizeof(destSockAddr)); if (status == SOCKET_ERROR) { cerr << "ERROR: connect unsuccessful" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; return false ; } cout << "Connected..." << endl; return true; } bool MSocket::sendData(char *mdata, int msize) { cout << "Sending..." << endl; numsnt=send(destSocket, mdata, msize, NO_FLAGS_SET); if (numsnt != msize) { cout << "Connection terminated" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; return false; } return true; } bool MSocket::disconnectFromHost() { status=closesocket(destSocket); if (status == SOCKET_ERROR) { cerr << "ERROR: closesocket unsuccessful" << endl; } status=WSACleanup(); if (status == SOCKET_ERROR) { cerr << "ERROR: WSACleanup unsuccessful" << endl; return false; } return true; } int MSocket::recvData(char *mdata, int msize) { status = recv(destSocket, mdata, msize, NO_FLAGS_SET); if (status == SOCKET_ERROR) { cerr << "ERROR: recv() unsuccessful" << endl; } return status; }
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved