卟留遗憾灬

卟留遗憾灬

0个粉丝

22

问答

4

专栏

321

资料

卟留遗憾灬  发布于  2020-07-24 17:05:19
采纳率 0%
22个问答
2918

UDP网络编程

 

编写步骤及需要注意的事项有哪些

我来回答
回答2个
时间排序
认可量排序

卟留遗憾灬

0个粉丝

22

问答

4

专栏

321

资料

卟留遗憾灬 2020-07-24 17:05:43
认可0

struct sockaddr struct sockaddr_in此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。

struct sockaddr {
unsigned short sa_family; / address family, AF_xxx /
char sa_data[14]; / 14 bytes of protocol address /
};

sockaddr_in(在netinet/in.h中定义):
struct sockaddr_in {
short int sin_family; / Address family /
unsigned short int sin_port; / Port number /
struct in_addr sin_addr; / Internet address /
unsigned char sin_zero[8]; / Same size as struct sockaddr /
};
struct in_addr {
unsigned long s_addr;
};
服务器:
1.创建套接字文件 socket(AF_INET,SOCK_DGRAM,0);
2.用truct sockaddr_in此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明服务器地址信息。(truct sockaddr_in service_addr)详细配置
(truct sockaddr_in client_addr)由于不知道客户端地址信息,所以创建,用来存储等待客户端发消息从而获得的地址信息
3.将服务器地址信息绑定到套接字文件bind(socfd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))
4.等待客户端主动连接recvfrom()
5.发送信息给客户端
6.退出

客户端:
1.创建套接字文件 socket(AF_INET,SOCK_DGRAM,0);
2.用truct sockaddr_in此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明服务器地址信息。(truct sockaddr_in 变量名)
3.发送信息给客户端
4.等待服务器发送信息
5.退出

需要注意的是:
1.端口号选取尽量大一点,以防被其他udp进程占用,0~65535,我刚开始选取666,无法实现正常功能,改成8888后能正常实现功能
2.服务器bind经常失败.解决方法:在bind设置SO_REUSEADDR套接字选项。
const int on=1;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
这个使服务端(server1)主动关闭后可以立即重启

在学了在学了!

3个粉丝

36

问答

104

专栏

162

资料

在学了在学了! 2020-07-24 18:55:57
认可0

感谢分享,受益良多!

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区