socket通信http和socket通信的区别

socket通信  时间:2021-06-07  阅读:()

UDP和Socket通信步骤

UDP Server程序 1、编写UDP Server程序的步骤 (1)使用socket()来建立一个UDP socket,第二个参数为SOCK_DGRAM。

(2)初始化sockaddr_in结构的变量,并赋值。

sockaddr_in结构定义: struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; 这里使用“08”作为服务程序的端口,使用“INADDR_ANY”作为绑定的IP地址即任何主机上的地址。

(3)使用bind()把上面的socket和定义的IP地址和端口绑定。

这里检查bind()是否执行成功,如果有错误就退出。

这样可以防止服务程序重复运行的问题。

(4)进入无限循环程序,使用recvfrom()进入等待状态,直到接收到客户程序发送的数据,就处理收到的数据,并向客户程序发送反馈。

这里是直接把收到的数据发回给客户程序。

2、udpserv.c程序内62616964757a686964616fe4b893e5b19e31333363373736容: #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include &/in.h> #include <stdio.h> #include <stdlib.h> #define MAXLINE 80 #define SERV_PORT 8888 void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen) { int n; socklen_t len; char mesg[MAXLINE]; for(;;) { len = clilen; /* waiting for receive data */ n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len); /* sent data back to client */ sendto(sockfd, mesg, n, 0, pcliaddr, len); } } int main(void) { int sockfd; struct sockaddr_in servaddr, cliaddr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */ /* init servaddr */ bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(SERV_PORT); /* bind address and port to socket */ if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) { perror("bind error"); exit(1); } do_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); return 0; } UDP Client程序 1、编写UDP Client程序的步骤 (1)初始化sockaddr_in结构的变量,并赋值。

这里使用“8888”作为连接的服务程序的端口,从命令行参数读取IP地址,并且判断IP地址是否符合要求。

(2)使用socket()来建立一个UDP socket,第二个参数为SOCK_DGRAM。

(3)使用connect()来建立与服务程序的连接。

与TCP协议不同,UDP的connect()并没有与服务程序三次握手。

上面我们说了UDP是非连接的,实际上也可以是连接的。

使用连接的UDP,kernel可以直接返回错误信息给用户程序,从而避免由于没有接收到数据而导致调用recvfrom()一直等待下去,看上去好像客户程序没有反应一样。

(4)向服务程序发送数据,因为使用连接的UDP,所以使用write()来替代sendto()。

这里的数据直接从标准输入读取用户输入。

(5)接收服务程序发回的数据,同样使用read()来替代recvfrom()。

(6)处理接收到的数据,这里是直接输出到标准输出上。

2、udpclient.c程序内容: #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include &/in.h> #include <stdio.h> #include <stdlib.h> #include <arpa/.h> #include <unistd.h> #define MAXLINE 80 #define SERV_PORT 8888 void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen) { int n; char sendline[MAXLINE], recvline[MAXLINE + 1]; /* connect to server */ if(connect(sockfd, (struct sockaddr *)pservaddr, servlen) == -1) { perror("connect error"); exit(1); } while(fgets(sendline, MAXLINE, fp) != NULL) { /* read a line and send to server */ write(sockfd, sendline, strlen(sendline)); /* receive data from server */ n = read(sockfd, recvline, MAXLINE); if(n == -1) { perror("read error"); exit(1); } recvline[n] = 0; /* terminate string */ fputs(recvline, stdout); } } int main(int argc, char **argv) { int sockfd; struct sockaddr_in srvaddr; /* check args */ if(argc != 2) { printf("usage: udpclient <IPaddress> "); exit(1); } /* init servaddr */ bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERV_PORT); if(_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) { printf("[%s] is not a valid IPaddress ", argv[1]); exit(1); } sockfd = socket(AF_INET, SOCK_DGRAM, 0); do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); return 0; } 运行例子程序 1、编译例子程序 使用如下命令来编译例子程序: -Wall -o udpserv udpserv.c -Wall -o udpclient udpclient.c 编译完成生成了udpserv和udpclient两个可执行程序。

2、运行UDP Server程序 执行./udpserv &命令来启动服务程序。

我们可以使stat -ln命令来观察服务程序绑定的IP地址和端口,部分输出信息如下: Active connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:32768 0.0.0.0:* udp 0 0 0.0.0.0:8888 0.0.0.0:* udp 0 0 0.0.0.0:111 0.0.0.0:* udp 0 0 0.0.0.0:882 0.0.0.0:* 可以看到udp处有“0.0.0.0:8888”的内容,说明服务程序已经正常运行,可以接收主机上任何IP地址且端口为8888的数据。

如果这时再执行./udpserv &命令,就会看到如下信息: bind error: Address already in use 说明已经有一个服务程序在运行了。

3、运行UDP Client程序 执行./udpclient 127.0.0.1命令来启动客户程序,使用127.0.0.1来连接服务程序,执行效果如下: Hello, World! Hello, World! this is a test this is a test ^d 输入的数据都正确从服务程序返回了,按ctrl+d可以结束输入,退出程序。

如果服务程序没有启动,而执行客户程序,就会看到如下信息: $ ./udpclient 127.0.0.1 test read error: Connection refused 说明指定的IP地址和端口没有服务程序绑定,客户程序就退出了。

这就是使用connect()的好处,注意,这里错误信息是在向服务程序发送数据后收到的,而不是在调用connect()时。

如果你使用tcpdump程序来抓包,会发现收到的是ICMP的错误信息。

怎样使用socket进行双向通信

下载完成后,软件是一个单独的运行程序,可以直接打开软件。

3 软件的界面很简单,在左侧有tcp和udp的客户端或服务端的快捷按钮,上方有【创建】【删除】【退出】等选项按钮。

4 我们先来建立TCP的测试服务端。

点击【TCP Server】再点击【创建】。

选择一个监听端口,这里我们使用6001作为服务端的监听端口。

建立完成后,服务端会自动启动,软件会显示【启动监听】的状态。

我们可以检测一下本机的6001端口是否已经打开。

在DOS窗口中输入命令stat -a】,可以在列表中看到本机的6001端口的状态为listening的状态,表示本机的6001端口正处于监听的状态。

在DOS窗口中输入命令【 192.168.0.140 6001】来登录本地的6001端口。

点击回车键,就可以成功登录6001端口。

在测试软件中就可以看到状态是已连接的状态,同时也可以看到对方的ip就是本地ip。

再来测试通信情况,在DOS窗口中输入a、b、c,在软件的接收窗口就可以看到收到的数据了。

在软件的发送窗口中输入1234567890,点击发送后,在DOS窗口中就可以看到软件发送过来的数据了。

测试完成后,在软件中点击【停止监听】,同时在DOS窗口中可以看到【失去了跟主机的连接】,表示测试连接已经断开。

再来创建TCP的客户端,点击【TCP Client】再点击【创建】。

会弹出【创建socket客户端】窗口,输入对方的ip和对方的端口,点击确认。

tcp的客户端已经建立好,如果对方的端口监听正常的话,点击【连接】就可以连接到对方的端口和对方进行测试通信了。

websocket通信是做什么用的

WebSocket protocol 是HTML5一种新的协议。

它实现了浏览器与服务器全双工通信(full-duplex)。

一开始的握手需要借助HTTP请求完成。

在浏览器中通过et可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。

http和socket通信的区别

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。

从建立连接到关闭连接的过程称为“一次连接”。

由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。

通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。

若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开. socket:套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。

它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认. 它是一种“长连接”。

IMIDC彩虹数据:日本站群多ip服务器促销;30Mbps带宽直连不限流量,$88/月

imidc怎么样?imidc彩虹数据或彩虹网络现在促销旗下日本多IP站群独立服务器,原价159美元的机器现在只需要88美元,而且给13个独立IPv4,30Mbps直连带宽,不限制月流量!IMIDC又名为彩虹数据,rainbow cloud,香港本土运营商,全线产品都是商家自营的,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非...

域名注册需要哪些条件(新手注册域名考虑的问题)

今天下午遇到一个网友聊到他昨天新注册的一个域名,今天在去使用的时候发现域名居然不见。开始怀疑他昨天是否付款扣费,以及是否有实名认证过,毕竟我们在国内域名注册平台注册域名是需要实名认证的,大概3-5天内如果不验证那是不可以使用的。但是如果注册完毕的域名找不到那也是奇怪。同时我也有怀疑他是不是忘记记错账户。毕竟我们有很多朋友在某个商家注册很多账户,有时候自己都忘记是用哪个账户的。但是我们去找账户也不办...

CloudCone:$17.99/年KVM-1GB/50GB/1TB/洛杉矶MC机房

CloudCone在月初发了个邮件,表示上新了一个系列VPS主机,采用SSD缓存磁盘,支持下单购买额外的CPU、内存和硬盘资源,最低年付17.99美元起。CloudCone成立于2017年,提供VPS和独立服务器租用,深耕洛杉矶MC机房,最初提供按小时计费随时退回,给自己弄回一大堆中国不能访问的IP,现在已经取消了随时删除了,不过他的VPS主机价格不贵,支持购买额外IP,还支持购买高防IP。下面列...

socket通信为你推荐
at89s52单片机AT89S52单片机和AT89C51单片机的区别chrome系统Chrome OS是什么系统?chrome系统谷歌Chrome OS可以用来做什么?华为总裁女儿为啥姓孟孟晚舟是谁搜索引擎的概念什么叫搜索引擎?搜索引擎的类型有哪些?awv如何把普通电影转换成AWVjs后退javascript怎么禁用浏览器后退按钮assemblyinfo什么是GAC数据挖掘项目什么是数据挖掘?从事相关的工作有什么要求?数据挖掘项目将来想从事统计分析和数据挖掘,需要哪些技能
vps侦探 淘宝抢红包攻略 themeforest 网站监控 正版win8.1升级win10 有益网络 彩虹云 512mb 湖南idc 浙江服务器 酸酸乳 godaddy空间 服务器硬件配置 97rb hostease 新疆服务器 japanese50m咸熟 免费的加速器 apache启动失败 phpwind论坛 更多