求救,关于套接字

Littleming 2005-01-31 03:10:59
#include <winsock2.h>
#include <stdio.h>
BOOL InitWinsock();
void main()
{
SOCKET socket1;

InitWinsock();
struct sockaddr_in server;
int len =sizeof(server);
server.sin_family=AF_INET;
server.sin_port=htons(8000); ///server的监听端口
server.sin_addr.s_addr=inet_addr("10.0.0.21"); ///server的地址

socket1=socket(AF_INET,SOCK_DGRAM,0);
while (1)
{
Sleep(500);
char buffer[1024]="\0";
printf("input message\n");
scanf("%s",buffer);
if (strcmp(buffer,"bye")==0)
break;
int s=send(socket1,buffer,sizeof buffer,0);
//int s=sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len);
if (s!=SOCKET_ERROR)
{
if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len)!=SOCKET_ERROR)
printf("Server:%s\n",buffer);
else
closesocket(socket1);
}

}

}

BOOL InitWinsock()
{
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}

}
return TRUE;
}


/* 我刚刚学套接字
不知道 send 和sendto 有什么区别?
我试验用sendto函数服务端可以收到,但是send就不行了,大家帮忙看一下有什么问题?
*/
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuelong_zl 2005-02-01
  • 打赏
  • 举报
回复
学习一下
syun0 2005-01-31
  • 打赏
  • 举报
回复
sendto还可用于T/TCP(支持的话)
kaphoon 2005-01-31
  • 打赏
  • 举报
回复
楼上诸位只说了其一。
当udp用connect进行连接后,也就可以使用send/write了。

server.sin_addr.s_addr=inet_addr("10.0.0.21"); ///server的地址
socket1=socket(AF_INET,SOCK_DGRAM,0);
//加上这句
connect(socket1,(struct sockaddr*)&server,sizeof(server));
healer_kx 2005-01-31
  • 打赏
  • 举报
回复
你们说得还不一样啊.
那我也说个不一样的.

sendto只能用于UDP和RawSocket

send是啥都可以的.
sboom 2005-01-31
  • 打赏
  • 举报
回复
sendto是TCP SOCKET用的,
SEND 是UDP SOCKET用的.
laomai 2005-01-31
  • 打赏
  • 举报
回复
sendto函数是用在 udp协议里的(也就是你代码里的sock_dgram)
send是用在tcp协议里的()对应的是sock_stream

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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