socket发送接收数据问题
服务器程序:
void main()
{
SOCKET socket1;
char *msg1= " ";
InitWinsock();//主要实现WSAStartup()初始化的函数
struct sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port=htons(3490); ///监听端口
local.sin_addr.s_addr=INADDR_ANY; ///本机
memset(local.sin_zero,0,8);
socket1=socket(AF_INET,SOCK_STREAM,0);
int bind_result = bind(socket1,(struct sockaddr*)&local,sizeof(local));
int nlisten = listen(socket1, 10);
printf( "Listening......\n ");
struct sockaddr_in their_addr;
int nSize = sizeof(their_addr);
int nNewFd = accept(socket1, (struct sockaddr*)&their_addr, &nSize);
printf( "Accepted! IP:%s: Port:%d\n ", inet_ntoa(their_addr.sin_addr), ntohs(their_addr.sin_port));
recv(socket1,msg1,1024,0);//接收客户端发来的消息
printf( "%s ",msg1);
closesocket(socket1);
}
客户端程序:
void main()
{
SOCKET socket1;
char *msg= "hello ";
int len,bytes_sentlen;
len=strlen(msg);
InitWinsock();
struct sockaddr_in from;
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(888);
local.sin_addr.s_addr = INADDR_ANY;
int fromlen =sizeof (from);
socket1 = socket(AF_INET,SOCK_STREAM,0);
int nbind = bind(socket1,(struct sockaddr*)&local, sizeof(local));
if (nbind < 0)
{
printf( "error bind ");
}
from.sin_family = AF_INET;
from.sin_port = htons(3490);
from.sin_addr.s_addr=inet_addr( "192.168.0.180 ");
memset(from.sin_zero, 0, 8);
int nCon = connect(socket1, (struct sockaddr*)& from, sizeof (from));
if (nCon < 0)
{
printf( "error bind ");
}
bytes_sentlen=send(socket1,msg,len,0);//发送
closesocket(socket1);
}
运行后,在服务器那边不会显示hello,就是服务器的
recv(socket1,msg1,1024,0);//接收客户端发来的消息
没收到消息,怎么解决啊???
[解决办法]
recv(socket1,msg1,1024,0);//
----------------------------
recv(nNewFd,msg1,1024,0);//
[解决办法]
客户端和服务器端的 端口应该是一致的。。。
现在你的服务器端是:
local.sin_port=htons(3490); ///监听端口
客户端是:
local.sin_port = htons(888);
[解决办法]
int nNewFd = accept(socket1, (struct sockaddr*)&their_addr, &nSize);
也有问题,应该是这样。。。
socket nNewFd = accept(socket1, (struct sockaddr*)&their_addr, &nSize);
之后,还有就是在服务器端的接受数据的操作时:
recv(socket1,msg1,1024,0);
应该用
recv(nNewFd,msg1,1024,0);
[解决办法]
while (1)
{
char buf[BUFFER_SIZE];
socklen_t length = sizeof(cliaddr);
cliefd = accept(servfd,(struct sockaddr*)&cliaddr,&length);
if (cliefd < 0)
{
continue;
}
recv(.....);
}