c语言,udp通信,该怎么写?范例,或书都行,谢谢

betterjonah 2003-12-02 02:32:47
c语言,udp通信,该怎么写?范例,或书都行,谢谢
...全文
368 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
galaxy_fxstar 2003-12-02
  • 打赏
  • 举报
回复
socket.h是windows下也支持的,
如果用vc做的话可以用mfc的类csocket,你可以看一下msdn中关于这个类的说明,
然后再参考udp通讯的设计眶架,套用csocket中的函数就可以实现了!
lzsbj 2003-12-02
  • 打赏
  • 举报
回复

UDP回射服务器程序
//服务器main主程序

#include "unp.h"
Int main(int argc, char **argv)
{
int sockfd; //定义套接字
struct sockaddr_in servaddr, cliaddr; //IPv4套接口地址定义
sockfd = Socket(AF_INET, SOCK_DGRAM, 0); //建立UDP套接字
bzero(&servaddr, sizeof(servaddr)); //地址结构清零
servaddr.sin_family = AF_INET; //IPv4协议
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//内核指定地址
servaddr.sin_port = htons(SERV_PORT); //9877 端口
/*分配协议地址,绑定端口*/
Bind(sockfd, (SA *) &servaddr, sizeof(servaddr));
/* 回射子程序*/
dg_echo(sockfd, (SA *) &cliaddr, sizeof(cliaddr));
}


回射子程序:

include "unp.h"
void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)
{
int n; //读入字节数
socklen_t len; //协议地址长度, 没有这个参数用 clilen也可以
char mesg[MAXLINE];
for ( ; ; ) {
len = clilen;
/* 读入一行 */
n = Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
/* 回射到对方套接口 */
Sendto(sockfd, mesg, n, 0, pcliaddr, len);
}
}


--------------------------------------------------------------------------------

UDP回射客户程序
//客户 main主程序

include "unp.h"
int main(int argc, char **argv) //命令行的第二个参数代表服务器地址
{ int sockfd; //套接字
struct sockaddr_in servaddr; //服务器地址结构
/* 必须在命令行指定服务器地址*/
if (argc != 2) err_quit("usage: udpcli <IPaddress>");
bzero(&servaddr, sizeof(servaddr)); //地址结构清零
servaddr.sin_family = AF_INET; //IPv4
servaddr.sin_port = htons(SERV_PORT); //9877端口
/*网络字节序的IP地址*/
Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
/*建立UPD套接口*/
sockfd = Socket(AF_INET, SOCK_DGRAM, 0);
/*回射客户端子程序, stdin 为标准输入:键盘*/
dg_cli(stdin, sockfd, (SA *) &servaddr, sizeof(servaddr));
exit(0); //子程序结束后退出程序
}

//客户端回射子程序

#include "unp.h"
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
{
int n; //读入字节数
char sendline[MAXLINE], recvline[MAXLINE + 1]; // 1:结束标志占用
/* 从键盘读入一行 */
while (Fgets(sendline, MAXLINE, fp) != NULL) { //如果不是^D结束
/* 将读入行发送到服务器套接口*/
Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
/*从读入回射,读入字节数为n, 不关心从何处读入
n = Recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);
recvline[n] = 0; /* recvline字符串的结束标志*/
Fputs(recvline, stdout); //输出到标准输出:显示器
} //while循环结束:直到从键盘读入结束符^D为止
}


liao2001 2003-12-02
  • 打赏
  • 举报
回复
windows和unix理论相同,机制相近
windows下可以查看winsock相关资料
unix下 《UNIX环境高级编程》
别忘了在你能熟练使用它后,看看tcp/ip的原理,这一点对你以后发展大有帮助,切记!
mixtrue 2003-12-02
  • 打赏
  • 举报
回复
you can vist the web site
www.codeproject.com
www.vchelp.net
www.developer.com


you you post your problems to microsoft's newsgroups.

betterjonah 2003-12-02
  • 打赏
  • 举报
回复
windows呢
fierygnu 2003-12-02
  • 打赏
  • 举报
回复
《UNIX环境高级编程》
看了还不会,就可以放弃了。

70,020

社区成员

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

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