这段代码有什么问题?希望大家帮忙看看,来者有分!

aaronzhang 2002-07-15 11:47:03
小弟近日编了一个程序,如下,不知道为何在最后一句的时候老是会获得错误,请各位高手不吝赐教!是有关winsock方面的:

UINT nPort;
char buffer[]="failed!!";
CSocket csSend;
int temp;
BOOL optval = TRUE;


if (csSend.Create(2000,SOCK_DGRAM,"127.0.0.1")==INVALID_SOCKET)
{
temp = GetLastError();
}


if (csSend.SetSockOpt(SO_REUSEADDR,(char*)&optval,sizeofoptval),SOL_SOCKET) == SOCKET_ERROR)
{
csSend.GetLastError();
}


if (csSend.SendTo(buffer,8,2000,"127.0.0.1",0)==SOCKET_ERROR)//就在这里会出错,错误代码为10038
{
csSend.GetLastError();
}

请大家帮忙看一下吧:)
...全文
39 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
smile_everyday 2002-07-16
  • 打赏
  • 举报
回复
AfxSocketInit()是用于初始化Socket库的.由于存在有winsock2 和winsock1.0的问题需要知道系统支持哪一种才先调用AfxSocketInit();
即使你写c代码,也需要一个什么WSAStartup来初始化。给一个MSDN中的例子:

WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}

/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */

if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
后面还有一个WSACleanup( ),用MFC就不要他了。


watchnight 2002-07-16
  • 打赏
  • 举报
回复
bind() 先
shyworm 2002-07-16
  • 打赏
  • 举报
回复
AfxSocketInit()是必须的.
smile_everyday 2002-07-16
  • 打赏
  • 举报
回复
我也不明白,你先试一下先!
aaronzhang 2002-07-16
  • 打赏
  • 举报
回复
Create的代码里面就有初始化的过程吧,是调用socket函数,然后再bind啊!
不明白。:(
smile_everyday 2002-07-16
  • 打赏
  • 举报
回复
Creat只能说是创建。我说的初始化是socket库的初始化!为什么要这样我也不清楚。但是它是必需的。
我以前抄一个聊天的程序,总是不能创建socket成功,就是因为没有初始化socket库。害得我骂人。但是它的源程序好好的!说来惭愧!
aaronzhang 2002-07-16
  • 打赏
  • 举报
回复
to smile_everyday() :
都Create了还不算初始化了吗?
aaronzhang 2002-07-16
  • 打赏
  • 举报
回复
哎!大家也纠缠不清,也没看见有什么特别厉害的高手。算了,一会给分吧
愉快的登山者 2002-07-15
  • 打赏
  • 举报
回复
你的程序是服务器还是客户端,有否与之对应的程序在运行,数据要传送到什么地方,这需要有一个接受数据的程序。
愉快的登山者 2002-07-15
  • 打赏
  • 举报
回复
你的程序是服务器还是客户端,有否与之对应的程序在运行,数据要传送到什么地方,这需要有一个接受数据的程序。
aaronzhang 2002-07-15
  • 打赏
  • 举报
回复
to:softman_2000(vc小虫)

啊?那这是同一个对象csSend的方法啊!我创建了一个csSend,在端口2000上,然后在SendTO里从这个端口发送出去,这个有问题吗?

如果有问题,那我应该怎么改?
aaronzhang 2002-07-15
  • 打赏
  • 举报
回复
to:softman_2000(vc小虫)

啊?那这是同一个对象csSend的方法啊!我创建了一个csSend,在端口2000上,然后在SendTO里从这个端口发送出去,这个有问题吗?

如果有问题,那我应该怎么改?
softman_2000 2002-07-15
  • 打赏
  • 举报
回复
Create和SendTo里面的2000不要写一样的,端口不能一样的。在单机上。
aaronzhang 2002-07-15
  • 打赏
  • 举报
回复
to: tohigh(风之子)

你什么意思啊?不是很明白,10038的意思我明白,但是为什么会出现这样的错误呢?上面的代码为什么会出现这种错误呢?不明白。

还请大家多指教。
tohigh 2002-07-15
  • 打赏
  • 举报
回复
在一个非套接字上尝试了一个操作。
static int GetLastError( );
Return Value!
smile_everyday 2002-07-15
  • 打赏
  • 举报
回复
你出的错误号不是10083吧!我试了一下,是10093。
你是不是没有初始化SOCKET. 加入相应的库以及以下的代码也许能行
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
RedSunRS 2002-07-15
  • 打赏
  • 举报
回复
有可有是缓冲区,溢出。
aaronzhang 2002-07-15
  • 打赏
  • 举报
回复
呵呵,create函数里面就有bind函数啊!这其实不就是在bind执行后调用setsockopt函数嘛?
kingfire 2002-07-15
  • 打赏
  • 举报
回复
To inform the Windows Sockets implementation that a Bind call on a socket should not be disallowed because the desired address is already in use by another socket, the application should set the SO_REUSEADDR socket option for the socket before issuing the Bind call. Note that the option is interpreted only at the time of the Bind call: it is therefore unnecessary (but harmless) to set the option on a socket which is not to be bound to an existing address, and setting or resetting the option after the Bind call has no effect on this or any other socket.
------------------------------------------------------------------
csSend.SetSockOpt(SO_REUSEADDR,(char*)&optval,sizeofoptval
csSend.Bind()的时候才用它啊!
还有是可以自己给自己发UDP包的!
aaronzhang 2002-07-15
  • 打赏
  • 举报
回复
没有,但是我把中间的那段有关setsockopt的代码去掉就可以了。
加载更多回复(6)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧