阅读:1174回复:4
谁有网络虚拟磁盘的源代码
我自己用网上的代码改了一个,但启动是老是蓝屏,问题比较多
那位大虾能否共享一下, |
|
|
沙发#
发布于:2005-03-09 17:15
蓝屏了可以慢慢调,这种东西蓝屏太正常了。
|
|
|
板凳#
发布于:2005-03-09 21:09
把代码帖出来看看......
|
|
|
地板#
发布于:2005-03-09 22:21
这段代码:
客户端 dStatus = TdiOpenTransport ( // open transport L\"\\\\device\\\\udp\", // device name CLIENT_PORT, // port number &hTdiTransport, // return transport handle &pTdiTransportObject ); // return transport object if ( NT_SUCCESS ( dStatus ) ) { dStatus = TdiQueryAddress ( pTdiTransportObject, &dTdiAddress ); if ( NT_SUCCESS ( dStatus ) ) DbgPrint ( \"Local IP Address = %X\\n\", dTdiAddress ); else DbgPrint ( \"ERROR: unable to determine local IP address\\n\" ); } else DbgPrint ( \"ERROR: open transport %X\\n\", dStatus ); //发送数据 NTSTATUS dStatus = STATUS_SUCCESS; UCHAR pbData[20] = \"tdi is not so bad\"; dStatus = TdiSendDatagram ( // send datagram pTdiTransportObject, // to transport MY_PORT, // port dTdiAddress, // address pbData, // data sizeof ( pbData ) ); // size if ( !NT_SUCCESS ( dStatus ) ) DbgPrint ( \"ERROR: sending %X\\n\", dStatus ); else DbgPrint ( \"send success\\n\" ); //接受数据 ULONG dAddress; ULONG dSize; dSize = sizeof ( pbData ); dStatus = TdiReceiveDatagram ( pTdiTransportObject, // to transport MY_PORT, // port &dTdiAddress, // address pbData, // buffer &dSize ); // buffer size if ( NT_SUCCESS ( dStatus ) ) DbgPrint ( \"TDI RECEIVE: %s\\n\", pbData ); else DbgPrint ( \"ERROR: receiving %X\\n\", dStatus ); 发送给服务端没问题,但是无法从服务端接受数据。为什么 服务端: #define SRV_PORT 0x1000 #define CLIENT_PORT 0x1001 // create socket ... s = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP); if ( INVALID_SOCKET == s) { printf(\"fail to create socket!\\n\"); goto err1; } // bind a local address with the socket ... memset( &addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addr.sin_port = htons(SRV_PORT); iRtn = bind( s, (const struct sockaddr *)(&addr), sizeof(addr)); if ( SOCKET_ERROR == iRtn) { printf(\"fail to bind local address with socket!\\n\"); goto err2; } // serve CDB ... while (TRUE) { // recv CDB ... len = sizeof(from); iRtn = recvfrom( s, (char *)buf, sizeof(buf), 0, (struct sockaddr *)&from, &len); if ( SOCKET_ERROR == iRtn) { printf(\"fail to recv data!\\n\"); goto err2; } #ifdef _DEBUG dumpCdb( buf); #endif // process CDB ... /*if ( buf[0] >= SRB_HANDLERS_COUNT) { HandleInvalidRequest(s, &from, fHandle, buf); } else { SrbHandlerArray[buf[0]](s, &from, fHandle, buf); }*/ from.sin_port = htons(CLIENT_PORT); sendto( s, (const char *)&pbData, \\ sizeof(pbData), 0, (struct sockaddr *)&from, sizeof(from)); } |
|
|
地下室#
发布于:2005-03-09 22:33
已经解决,谢谢各位。
|
|
|