2 u010287873 u010287873 于 2018.02.06 14:17 提问

socket编程问题求大神指点下 20C

socket编程中应用层的协议用的是什么啊?socket和severSocket通信时应该用到了某一种应用层协议吧?我只知道传输层可以指定使用TCP协议。

14个回答

yxhlfx
yxhlfx   2018.02.06 14:40

最简单的网络模型如下:


图片说明

在Socket编程中通常会打开一个Socket套接字,如:
//四层协议是TCP,三层协议是IP
int fd = socket(AF_INET, SOCK_STREAM, 0)
//四层协议是UDP,三层协议是IP
int fd = socket(AF_INET, SOCK_DGRAM, 0)
//四层协议是TCP,三层协议是IPV6
int fd = socket(AF_INET6, SOCK_STREAM, 0)

通过不同的打开方式能够得到按不同协议传输的套接字,那么到应用层,如下是一个HTTP协议的例子:

//应用层协议http, 4层tcp, 3层ip
char *http_content = "GET / HTTP 1.1\r\nHOST: www.csdn.com\r\n\r\n";
int fd = socket(AF_INET, SOCK_STREAM, 0);
send(fd, http_content, strlen(http_content));

那么换成FTP协议怎么样?

//应用层协议ftp, 4层tcp, 3层ip
char *ftp_content = “LIST /\r\n”
int fd = socket(AF_INET, SOCK_STREAM, 0);
send(fd, http_content, strlen(ftp_content));

如果你这样写:

//应用层协议不知道, 4层tcp, 3层ip
char *unkonwn_content = “1234567”
int fd = socket(AF_INET, SOCK_STREAM, 0);
send(fd, http_content, strlen(unkonwn_content));

因此单从内容的角度的话我们层符合相应协议规范的内容我们将其数据称为相应的协议,而在应用中,应用层协议到底应该是什么样的则由服务器说了算,如果你向一个FTP服务器发送按HTTP协议封装的数据,那FTP服务器肯定不会认识,它会认为你发的是错误的消息,直接丢弃。而如果你只是简单的写了一个Socket通信的例子,应用层没有按任何协议定义进行封装,那你的消息就没有任何协议,如果你按特定的协议规范封装了,你也可以说你的应用层协议是相应协议。

zhoujianghua_2008
zhoujianghua_2008   2018.02.06 15:34

一般的应用,其实都可以自己开发一套自己的应用协议的,不过你要清楚,自己定义一套协议,工作量是比较大的。就算用到目前市面上开源的
一些框架使用起来
也是比较麻烦的。如果你的系统是一个普通的应用,安全性要求不高,你就可以简单处理然后tcp/ip通讯就可以了的。另外说明一下:port指向的是应用,
可以理解为,一个进程。ip指向一台计算机。

u012016268
u012016268   2018.02.06 14:23

tcp协议用于传输控制协议,具体通信层面需要根据自己的业务来解析字节流,比如tomcat就是实现了HTTP协议,根据hTTP规矩来解析数据

godmaycry
godmaycry   2018.02.06 14:29

用什么协议要看client和server之间的约定,没有约定就是透传。
常见的情况,http、websocket、mqtt等使用的较多。
如果没太大需求,透传也没啥问题。

baidu_31235737
baidu_31235737   2018.02.06 14:29

android中,socket封装了Tcp/Ip与Udp通信协议,.Net的话Udp通信有UdpClient类,Socket用与Tcp协议

liu13816947142
liu13816947142   2018.02.06 14:27

socket编程就是用的tcp和udp协议呀,应用层协议常见的http,ftp这些是基于tcp或者udp的

fzlwyqn
fzlwyqn   2018.02.06 14:48

假如我们要做一个C/S型的程序设计,服务端和客户端使用TCP通信,这时就需要在TCP协议之上,选择一个合适的应用层协议,如果不喜欢已有的协议,那就需要自己去实现一个协议规程,现在我们就要去完成一个图1所示的协议
1.定义传输的消息格式
2.实现服务器
3.实现通信协议
3.实现客户端

weixin_40665808
weixin_40665808   2018.02.06 15:04

应用层协议基于TCP或者UDP

kprc
kprc   2018.02.06 15:16

原则上,你的端口号对应的就是应用层协议,比如80就是http,21就是ftp,22就是ssh,23就是telnet等等。
但是由于端口号是可以随便修改的,所以上面的说法是错的,具体的协议要看你想用什么了,你就是自己定义一套都可以。
如果你自己定义一套,那你就得定义边界,你还得自己写解析,封装等等。所以一般的开发,为什么不用现成的协议呢?

u013173814
u013173814   2018.02.06 17:43

用UDP协会野可以啊

共14条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!