基于UDP协议的进程间通信

UDP协议是无连接的并且面向数据块的。所以client端不需要与server端进行连接,直接发送消息。

server:
 1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<sys/types.h>
  4 #include<sys/socket.h>
  5 #include<netinet/in.h>
  6 #include<arpa/inet.h>
  7 #include<string.h>
  8 void usage(char *port)
  9 {
 10     printf("%s,[ip],[port]\n",port);
 11 }
 12 int main(int argc,char *argv[])
 13 {
 14     if(argc!=3)
 15     {
 16         usage(argv[0]);
 17         exit(1);
 18     }
 19     int sock = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
 20     if(sock<0)
 21     {
 22         perror("socket");
 23         return 1;
 24     }
 25     int port = atoi(argv[2]);
 26     char *ip = argv[1];
 27     struct sockaddr_in client;
 28     client.sin_family = AF_INET;
 29     client.sin_port = htons(port);
 30     client.sin_addr.s_addr = inet_addr(ip);
 31     if(bind(sock,(struct sockaddr*)&client,sizeof(client))<0)
 32     {
 33         perror("bind");
 34         exit(1);
 35     }
 36     char buf[1024];
 37     struct sockaddr_in remote;
 38     socklen_t len = sizeof(remote);
 39     while(1)
 40     {
 41         ssize_t size = recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr*)&re    mote,&len);  //接收消息
 42         if(size>0)
 43         {
 44             buf[size-1]=‘\0‘;
 45             printf("%s,%d: %s\n",inet_ntoa(remote.sin_addr),ntohs(remote.sin    _port),buf);
 46 
 47         }
 48         else if(size==0)
 49         {}
 50         else
 51         {
 52             perror("recvfrom");
 53             exit(2);
 54         }
 55         fflush(stdout);
 56     }
 57     return 0;
 58 }
 
 client:
 1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<sys/types.h>
  4 #include<sys/socket.h>
  5 #include<string.h>
  6 #include<unistd.h>
  7 #include<netinet/in.h>
  8 #include<arpa/inet.h>
  9 void usage(char *port)
 10 {
 11     printf("%s,[ip],[port]\n",port);
 12 }
 13 int main(int argc,char *argv[])
 14 {
 15     if(argc!=3)
 16     {
 17         usage(argv[0]);
 18         exit(1);
 19     }
 20     int sock = socket(AF_INET,SOCK_DGRAM,0);
 21     if(sock<0)
 22     {
 23         perror("socket");
  24         return 1;
 25     }
 26     int port = atoi(argv[2]);
 27     char *ip = argv[1];
 28     struct sockaddr_in remote;
 29     remote.sin_family = AF_INET;
 30     remote.sin_port = htons(port);
 31     remote.sin_addr.s_addr = inet_addr(ip);
 32     char buf[1024];
 33     while(1)
 34     {
 35         memset(buf,‘\0‘,sizeof(buf));
 36         ssize_t _s = read(0,buf,sizeof(buf)-1);
 37         if(_s<0)
 38         {
 39             perror("read");
 40             exit(1);
 41         }
 42         ssize_t size = sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&remo    te,sizeof(remote)); //发送消息
 43         if(size<0)
 44         {
 45             perror("sendto");
  46             exit(1);
 47         }
 48 
 49     }
 50     return 0;
 51 }
 
 
 [[email protected] udp]$ ./server 192.168.1.106 8080
192.168.1.106,33647: how are you
192.168.1.106,33647: hi
192.168.1.106,33647: hnxu
^C
[[email protected] udp]$ 
[[email protected] udp]$ ./client 192.168.1.106 8080
how are you
hi
hnxu
^C
[[email protected] udp]$
时间: 2024-11-21 04:17:57

基于UDP协议的进程间通信的相关文章

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

JAVA基础知识之网络编程——-基于UDP协议的通信例子

UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramSocket类的receive和send方法即可,但消息需要通过一个特定的类封装(DatagramPacket) 下面是一个基于UDP协议的通信的例子, 服务器端, 1 package udp; 2 3 import java.io.IOException; 4 import java.net.Dat

基于 UDP 协议的网络编程

类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序 UDP 数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP 数据报一定能够安全送到目的地,也不能确定什么时候可以抵达 DatagramPacket 对象封装了 UDP 数据报(<64k),在数据报中包含了发送端的 IP 地址和端口号以及接收端的 IP 地址和端口号 UDP 协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接 举例: publ

基于UDP协议的网络编程

UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSocket代表基于UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报.Java使用DatagramPacket来代表数据报,DatagramSocket接收和发送数据都是通过DatagramPacket对象完成的. Datagr

Android基础入门教程——7.6.4 基于UDP协议的Socket通信

Android基础入门教程--7.6.4 基于UDP协议的Socket通信 标签(空格分隔): Android基础入门教程 本节引言: 本节给大家带来Socket的最后一节:基于UDP协议的Socket通信,在第一节中我们已经详细地 比较了两者的区别,TCP和UDP最大的区别在于是否需要客户端与服务端建立连接后才能进行 数据传输,如果你学了前两节TCP的,传输前先开服务端,accept,等客户端接入,然后获得 客户端socket然后进行IO操作,而UDP则不用,UDP以数据报作为数据的传输载体,

tsunami:一种基于UDP协议的快速传输

一. 需求 最近在做数据库迁移,经常需要打包实例传输,传统scp感觉很慢. 二. 软件信息 1. 软件主页:http://tsunami-udp.sf.net/ 2. 软件安装:直接源码make && make install 三. 简单使用 以下介绍简明步骤: 在源机子开启tsunami进程:tsunamid * 在目标机子 connect ip  &&  get 四. 测试 在几台待迁移服务器上(机子比较老)传输时发现在70Mb/s左右 五. 使用经验 如果做tar包,

Java网络编程 - 基于UDP协议 实现简单的聊天室程序

最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理. "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: 将客户端的信息(进入了哪一个聊

基于UDP协议模拟的一个TCP协议传输系统

TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术. 我写的这个系统基于UDP协议模拟了一个TCP协议,所实现的功能如下: 1.三次握手 2.一个计时器,用来判断传输超时行为 3.快速重传 4.能处理不同的MSS(maximum segment size) 5.没有被接收方确认收到的包会被存在发送方,最大可以存MWS个(Maximum Window size) 6.能处理包丢失的情况 7.接收方一旦收到包,立刻发送确认信息给发送方 8.接收方的超时时间是固定的 9.接收方

基于UDP协议的socket编程

UDP协议特点: 1.无连接.服务端与客户端传输数据之前不需要进行连接,且没有超时重发等机制,只是把数据通过网络发送出去.也正是因为此特点,所以基于UDP协议的socket的客户端在启动之前不需要先启动服务端. 2.不可靠.数据在本地通过网络发出之后,UDP协议会立即清除本地的缓存,即使对方没有收到该数据,也不做任何补救措施. 3.数据报协议. 代码示例: 1 import socket 2 server = socket.socket(socket.AF_INET,socket.SOCK_DG