首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我的一段程序只能发UDP包,不能发tcp包

2012-03-12 
我的一段程序只能发UDP包,不能发tcp包?下面是其中的一段。此段发送一个udp包,可以成功。DWORD WINAPI tcp(){

我的一段程序只能发UDP包,不能发tcp包?
下面是其中的一段。此段发送一个udp包,可以成功。
DWORD WINAPI tcp()
 {
char buf[100];
  SOCKADDR_IN ssin;
LPHOSTENT hostent = NULL;
IN_ADDR iaddr;
SOCKET usock;

usock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); (1)
memset(&ssin, 0, sizeof(ssin));
ssin.sin_family = AF_INET;
hostent = gethostbyname("x.x.x.x");
ssin.sin_addr = *((LPIN_ADDR)*hostent->h_addr_list);
ssin.sin_port = htons(23);
sendto(usock, buf, 100, 0, (LPSOCKADDR)&ssin, sizeof(ssin));
xuf<<GetLastError()<<endl;
 }
可要是把(1)行改成
usock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
就会得到10057,即无法连接socket错误,请问怎么回事?谢谢

[解决办法]
10057的原因如下:
由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。 

感觉不是这个语句得到的错误 usock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
是不是这个语句得到的10057? sendto(usock, buf, 100, 0, (LPSOCKADDR)&ssin, sizeof(ssin)); 
由于没有建立TCP连接而无法发送。
[解决办法]
TCP 要用send,不是sendto,而且用之前要用conect链接目标
[解决办法]

C/C++ code
SOCKADDR_IN ssin; SOCKET usock= socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );if( usock !=INVALID_SOCKET){   memset(&ssin, 0, sizeof(ssin));    ssin.sin_family = AF_INET;    hostent = gethostbyname("x.x.x.x");    ssin.sin_addr = *((LPIN_ADDR)*hostent->h_addr_list);    ssin.sin_port = htons(23);    if( connect( usock, (SOCKADDR*)&ssin, sizeof( ssin) ) != SOCKET_ERROR )   {      send(usock, buf, 100, 0 );   }}
[解决办法]
没有进行3路握手,tcp没有确定目标ip地址,无法通信。

理论上,可以对udp进行connect,之后用send函数。

但是,对tcp,必须是connect或是accept之后才能使用。
(这时候,socket是一个流,用send,write都可以的)

热点排行