用VC++写网络编程中遇到的问题
基于UDP聊天的程序:XP下的vC++6.0写的。接收端代码:#include<Winsock2.h>#include<stdio.h>voidmain(){//加载套接...
基于UDP聊天的程序:XP下的vC++ 6.0写的。
接收端代码:
#include <Winsock2.h>
#include <stdio.h>
void main(){
//加载套接字
WORD wVersionRequested=MAKEWORD(1,1);
WSADATA WSAData;
int error;
error=WSAStartup(wVersionRequested,&WSAData);
if(0!=error){
printf("加载失败!\n");
}
//创建套接字
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
//绑定
SOCKADDR_IN sockAddr;
sockAddr.sin_family=AF_INET;
sockAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sockAddr.sin_port=htons(7355);
while(1){
bind(sockSrv,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR));
char recvBuf[100];
SOCKADDR_IN sockAddrClient;
int len=sizeof(SOCKADDR);
//接收数据
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&sockAddrClient,&len);
printf("%s\n",recvBuf);
//关闭套接字
}
closesocket(sockSrv);
}
发送端代码:
#include <Winsock2.h>
#include <stdio.h>
void main(){
//加载套接字
WORD wVersionRequested=MAKEWORD(1,1);
WSADATA WSAData;
int error;
error=WSAStartup(wVersionRequested,&WSAData);
if(0!=error){
printf("加载失败!\n");
}
while(1){
char sendBuf[100];
scanf("%s\n",sendBuf);
//创建套接字
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
//发送数据
SOCKADDR_IN sendAddr;
sendAddr.sin_family=AF_INET;
sendAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
sendAddr.sin_port=htons(7355);
sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&sendAddr,sizeof(SOCKADDR));
//关闭套接字
closesocket(sockClient);
}
}
问题:
分别起动它们后,
发送端程序中,输入a,然后回车;在接收端中没有看到有a字符打印出来;
在发送端再输入b,然后回车,在接收端中打印出a;
在发送端再输入c,然后回车,在接收端中打印出b;
在发送端再输入d,然后回车,在接收端中打印出c;
怎样才可以在发送端中输入asd,然后回车后,在接收端立马打印出asd,?????
该程序运行正常,只是运行结果不理想,具体的请仔细阅读以上的问题部分,谢谢!
换成基于TCP的代码运行结果也和上面的类似!我这里写不上去了,好像有个那个循环就会有这样的问题,把循环去掉就没事。 展开
接收端代码:
#include <Winsock2.h>
#include <stdio.h>
void main(){
//加载套接字
WORD wVersionRequested=MAKEWORD(1,1);
WSADATA WSAData;
int error;
error=WSAStartup(wVersionRequested,&WSAData);
if(0!=error){
printf("加载失败!\n");
}
//创建套接字
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
//绑定
SOCKADDR_IN sockAddr;
sockAddr.sin_family=AF_INET;
sockAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sockAddr.sin_port=htons(7355);
while(1){
bind(sockSrv,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR));
char recvBuf[100];
SOCKADDR_IN sockAddrClient;
int len=sizeof(SOCKADDR);
//接收数据
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&sockAddrClient,&len);
printf("%s\n",recvBuf);
//关闭套接字
}
closesocket(sockSrv);
}
发送端代码:
#include <Winsock2.h>
#include <stdio.h>
void main(){
//加载套接字
WORD wVersionRequested=MAKEWORD(1,1);
WSADATA WSAData;
int error;
error=WSAStartup(wVersionRequested,&WSAData);
if(0!=error){
printf("加载失败!\n");
}
while(1){
char sendBuf[100];
scanf("%s\n",sendBuf);
//创建套接字
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
//发送数据
SOCKADDR_IN sendAddr;
sendAddr.sin_family=AF_INET;
sendAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
sendAddr.sin_port=htons(7355);
sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&sendAddr,sizeof(SOCKADDR));
//关闭套接字
closesocket(sockClient);
}
}
问题:
分别起动它们后,
发送端程序中,输入a,然后回车;在接收端中没有看到有a字符打印出来;
在发送端再输入b,然后回车,在接收端中打印出a;
在发送端再输入c,然后回车,在接收端中打印出b;
在发送端再输入d,然后回车,在接收端中打印出c;
怎样才可以在发送端中输入asd,然后回车后,在接收端立马打印出asd,?????
该程序运行正常,只是运行结果不理想,具体的请仔细阅读以上的问题部分,谢谢!
换成基于TCP的代码运行结果也和上面的类似!我这里写不上去了,好像有个那个循环就会有这样的问题,把循环去掉就没事。 展开
展开全部
本来udp传输就不能保证马上打印出来, 你输入a, 再输入b, 它都不打印, 到输入c再打印a也是有可能的. 用listen, accept, recv, send应该可以
////////////////////////////////////////////////////////////////////
你的代码我调过了, 因为发送端scanf("%s\n",sendBuf);多加了个\n, 所以第一次输入的时候scanf没有返回. 去掉\n就好了
////////////////////////////////////////////////////////////////////
你的代码我调过了, 因为发送端scanf("%s\n",sendBuf);多加了个\n, 所以第一次输入的时候scanf没有返回. 去掉\n就好了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询