初次网络编程,编了一个小小的程序,代码如下:#include<winsock2.h>
#include<stdio.h>
void main(void)
{
WSADATA wsaData;
//初始化版本
int Ret=WSAStartup(MAKEWORD(2,2),&wsaData);
if(Ret!=0)
{
printf("WSAStartup failed with error %d\n",Ret);
return;
} if(WSACleanup()==SOCKET_ERROR)
{
printf("WSACleanup failed with error %d\n",WSAGetLastError());
}
else printf("establish successful!\n");
SOCKADDR_IN InternetAddr;
INT nPortId=5150;
InternetAddr.sin_family=AF_INET;
InternetAddr.sin_addr.s_addr=inet_addr("172.29.26.227");//如何将这个IP 输出呢?用printf怎样输出呢? InternetAddr.sin_port=htons(nPortId);
SOCKET s;
SOCKADDR_IN tcpaddr;
int port = 5150;
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);
if((bind(s,(SOCKADDR *)&tcpaddr,sizeof(tcpaddr)))==SOCKET_ERROR)
printf("bind failed!\n");
}
程序运行结果:
establish successful!
bind failed!
Press any key to continue
为什么会绑定不成功返回SOCKET_ERROR呢?
请高手指点~~
#include<stdio.h>
void main(void)
{
WSADATA wsaData;
//初始化版本
int Ret=WSAStartup(MAKEWORD(2,2),&wsaData);
if(Ret!=0)
{
printf("WSAStartup failed with error %d\n",Ret);
return;
} if(WSACleanup()==SOCKET_ERROR)
{
printf("WSACleanup failed with error %d\n",WSAGetLastError());
}
else printf("establish successful!\n");
SOCKADDR_IN InternetAddr;
INT nPortId=5150;
InternetAddr.sin_family=AF_INET;
InternetAddr.sin_addr.s_addr=inet_addr("172.29.26.227");//如何将这个IP 输出呢?用printf怎样输出呢? InternetAddr.sin_port=htons(nPortId);
SOCKET s;
SOCKADDR_IN tcpaddr;
int port = 5150;
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);
if((bind(s,(SOCKADDR *)&tcpaddr,sizeof(tcpaddr)))==SOCKET_ERROR)
printf("bind failed!\n");
}
程序运行结果:
establish successful!
bind failed!
Press any key to continue
为什么会绑定不成功返回SOCKET_ERROR呢?
请高手指点~~
去掉这段代码
if(WSACleanup()==SOCKET_ERROR)
{
printf("WSACleanup failed with error %d\n",WSAGetLastError());
} 问题2
printf("%s","172.29.26.227\n");
bind(socketudpsrv,(SOCKADDR*)&addrsrv,sizefo(SOCKETADDR););
MSDN:
Return Values
If no error occurs, bind returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.你已经正常bind了。
这句去掉
#include<winsock2.h>
#include<stdio.h>
void main(void)
{
WSADATA wsaData;
//初始化版本
int Ret=WSAStartup(MAKEWORD(2,2),&wsaData);
if(Ret!=0)
{
printf("WSAStartup failed with error %d\n",Ret);
return;
} /*if(WSACleanup()==SOCKET_ERROR)
{
printf("WSACleanup failed with error %d\n",WSAGetLastError());
}
else printf("establish successful!\n");*/
SOCKADDR_IN InternetAddr;
INT nPortId=5150;
InternetAddr.sin_family=AF_INET;
InternetAddr.sin_addr.s_addr=inet_addr("172.29.26.227");
InternetAddr.sin_port=htons(nPortId);
//printf("%s",InternetAddr.sin_addr.s_addr);
SOCKET s;
SOCKADDR_IN tcpaddr;
int port = 1000555;
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s=0)
printf("setup socket error!");
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);
bind(s,(SOCKADDR *)&tcpaddr,sizeof(tcpaddr));
if((bind(s,(SOCKADDR *)&tcpaddr,sizeof(tcpaddr)))==SOCKET_ERROR)
printf("bind failed!\n");
else printf("bind successful!");
}
端口试了好几次了,但是都不行,运行结果如下:
bind failed!
Press any key to continue
而且,我将语句printf("%s",InternetAddr.sin_addr.s_addr); 加入,则程序出现错误,强制退出。请大家指点一下啊~~~
2 InternetAddr.sin_addr.s_addr 并不是字符串类型,直接按字符串处理。程序肯定会异常退出。
printf("%s\n", inet_ntoa(InternetAddr.sin_addr.s_addr));
#include <stdio.h>
void main(void)
{
WSADATA wsaData;
//初始化版本
int Ret=WSAStartup(MAKEWORD(2,2),&wsaData);
if(Ret!=0)
{
printf("WSAStartup failed with error %d\n",Ret);
return;
} /*if(WSACleanup()==SOCKET_ERROR)
{
printf("WSACleanup failed with error %d\n",WSAGetLastError());
}
else printf("establish successful!\n");*/
SOCKADDR_IN InternetAddr;
INT nPortId=5150;
InternetAddr.sin_family=AF_INET;
InternetAddr.sin_addr.s_addr=inet_addr("172.29.26.227");
InternetAddr.sin_port=htons(nPortId);
//printf("%s",InternetAddr.sin_addr.s_addr);
SOCKET s;
SOCKADDR_IN tcpaddr;
int port = 1000555;
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s=0)
printf("setup socket error!");
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);
bind(s,(SOCKADDR *)&tcpaddr,sizeof(tcpaddr));
if((bind(s,(SOCKADDR *)&tcpaddr,sizeof(tcpaddr)))==SOCKET_ERROR)
printf("bind failed!\n");
else printf("bind successful!");
} bind了2次当然会失败
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s=0)
printf("setup socket error!");
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY); 套接字被你改了!!当然也会bind失败!