linux系统UDP的socket通信编程3
2024-10-21 18:45:00
我刚开始接触linux下的socket编程,边抄边理解udp socket编程,我的疑问是server不指定IP地址,client的目标IP地址是127.0.0.1,这样就可以通信吗?在同一主机下是不是不能测试?如果server默认绑定本机的IP 地址,那么开启server后,在浏览器中输入127.0.0.1:(相应端口) 也可以得到数据?我的程序如下,没有跑起来,其实我觉得我不会测试,不知道本质所以会有细节漏掉。(使用的系统是ubuntu 11.10 ,编译器GCC ,分别在同一主机下的两个终端中运行生成的.out文件。)提前感谢大家的回答,不管多少,您的回答让一个初学者非常暖心~~
服务器程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include<stdio.h> #include<netinet/in.h> #include<arpa/inet.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #define lport 4567 int main() { int mysock,len; struct sockaddr_in addr; int i=0; char msg[256]; int addr_len; if ((mysock=socket(AF_INET,SOCK_DGRAM,0))<0) { perror ( "error" ); exit (1); } else { printf ( "socket created.\n" ); printf ( "socket ID: %d\n" ,mysock); } addr_len= sizeof ( struct sockaddr_in); bzero(&addr, sizeof (addr)); addr.sin_family=AF_INET; addr.sin_port=htons(lport); addr.sin_addr.s_addr=htonl(INADDR_ANY); if (bind(mysock,&addr, sizeof (addr))<0) { perror ( "connect" ); exit (1); } else { printf ( "bind ok.\n" ); printf ( "local port: %d\n" ,lport); } while (1) { bzero(msg, sizeof (msg)); len=recvfrom (mysock,msg, sizeof (msg),0,&addr,&addr_len); printf ( "%d: " ,i); i++; printf ( "message form: %s\n" ,inet_ntoa(addr.sin_addr)); printf ( "message: %s\n\n" ,msg); sendto(mysock,msg,len,0,&addr,addr_len); } return 0; } |
客户机程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#include<stdio.h> #include<netinet/in.h> #include<arpa/inet.h> #include<unistd.h> #include<fcntl.h> #include<sys/stat.h> #include<sys/types.h> #include<sys/socket.h> #define rport 4567 #define rip "127.0.0.1" int main() { int s,len; struct sockaddr_in addr; int addr_len; char msg[256]; int i=0; if ((s=socket(AF_INET,SOCK_DGRAM,0))<0) { perror ( "error" ); exit (1); } else { printf ( "socket created.\n" ); printf ( "socket id: %d\n" ,s); printf ( "romote ip: %s\n" ,rip); printf ( "remote port: %d\n" ,rport); } len= sizeof ( struct sockaddr_in); bzero(&addr, sizeof (addr)); addr.sin_family=AF_INET; addr.sin_port=htons(rport); addr.sin_addr.s_addr=inet_addr(rip); while (1) { bzero(msg, sizeof (msg)); len=read(STDIN_FILENO,msg, sizeof (msg)); sendto(s,msg,len,0,&addr,addr_len); printf ( "\nInput message: %s\n" ,msg); len=recvfrom(s,msg, sizeof (msg),0,&addr,&addr_len); printf ( "%d :" ,i); i++; printf ( "received message: %s \n" ,msg); } return 0; } |
最新文章
- PHP之时间和日期函数
- Quartus II USB-Blaster驱动解决
- 高级Linux SA需要会做的事情
- C++ 第二次课堂作业(反转链表)
- n皇后2种解题思路与代码-Java与C++实现
- androidService总结
- Unity3D之UGUI学习笔记(三):EventSystem
- 【noip2012】开车旅行
- Hdu 1175 连连看(DFS)
- android百度地图打包混淆 用不了No such file or directory (2) com.baidu.mapapi.BMapManager.init(Unknown Source)
- matlab for循环应用(阶乘及the day of year)
- 初学者一些常用的SQL语句(一)
- java泛型学习(一)
- NOSQL schema创建原则
- 饮冰三年-人工智能-Python-25 Django admin
- angular.js学习笔记(二)
- java 接口与工厂
- cloudera项目源代码
- 用SLF4j/Logback打印日志-3
- bzoj1055玩具取名
热门文章
- Linux 设备模型之 (kobject、kset 和 Subsystem)(二)
- mysql合并查询结果及为表和字段取别名
- LUA中获得服务器IP
- asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录
- 关于winform窗体关闭时弹出提示框,选择否时窗体也关闭的问题
- 微信分享SDK
- Qt 线程基础(QThread、QtConcurrent等)
- Flume1.5.0入门:安装、部署、及flume的案例
- 关于用Spine制作骨骼动画的步骤
- 关于Cocos2d-x中节点和精灵的关系以及初始化