/*************************************************************************
    > File Name: server.c
    > Author: Stomach_ache
    > Mail: 1179998621@qq.com 
    > Created Time: 2014年02月25日 星期二 08时17分13秒
    > Propose: 
 ************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/in.h>

#define KEY ("request!")
#define MAX_SIZE 1024

int 
main(int argc, char **argv)
{
int sfp;
struct sockaddr_in s_add, c_add;
int sin_size;
int recbytes;
char buffer[MAX_SIZE];
unsigned short portnum = 0x8888;

printf("Hello, welcome to my server!\n");

//创建一个套接字,类型使用:SOCK_DGRAM,它的默认协议是UDP

sfp = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sfp) {
printf("socket fail!\n");
return -1;
}
printf("socket ok!\n");

//好像比较推荐使用memset而不是bzero
bzero(&s_add, sizeof(struct sockaddr_in));
s_add.sin_family = AF_INET;
s_add.sin_addr.s_addr= htonl(INADDR_ANY);
s_add.sin_port = htons(portnum);

//套接字和地址绑定
if (-1 == bind(sfp, (struct sockaddr *)(&s_add), sizeof(struct sockaddr))) {
printf("bind fail!\n");
return -1;
}
printf("bind ok!\n");

int len = sizeof(c_add);

while (1) {

if (-1 == (recbytes = recvfrom(sfp, buffer, 1024, 0,
  (struct sockaddr*)&c_add,
  &len))) {
printf("read data fail!\n");
return -1;
}
//printf("read ok!\nREC:\n");
buffer[recbytes] = '\0';
/* printf("%s\n", buffer); */
if (0 == strcmp(buffer, KEY)) {
printf("key is right!\n");
if (-1 == sendto(sfp, "you are an idiot!\n", 32, 0,
(struct sockaddr*)&c_add,
sizeof(c_add))) {
printf("write fail!\n");
return -1;
}
printf("write ok!\n");
}
/* close(nfp); */
}

close(sfp);
return 0;

}

/*************************************************************************
    > File Name: client.c
    > Author: Stomach_ache
    > Mail: 1179998621@qq.com 
    > Created Time: 2014年02月25日 星期二 08时42分12秒
    > Propose: 
 ************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <linux/in.h>
#include <sys/types.h>

#define KEY ("request!")
#define MAX_SIZE 1024
#define TIME_INTERVAL 3
int
main(int argc, char **argv) 
{
int cfd;
int recbytes;
int sin_size;
char buffer[MAX_SIZE] = {'\0'};
struct sockaddr_in s_add;
unsigned short portnum = 0x8888;

printf("Hello, welcome to client!\n");

cfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == cfd) {
printf("socket fail!\n");
return -1;
}
printf("socket ok!\n");

bzero(&s_add, sizeof(struct sockaddr_in));
s_add.sin_family = AF_INET;
s_add.sin_addr.s_addr = inet_addr("127.0.0.1");
s_add.sin_port = htons(portnum);

printf("s_addr = %#x, port : %#x\n", s_add.sin_addr.s_addr, s_add.sin_port);

//客户端每隔3秒发送一次请求
while (1) {
   /* sleep(TIME_INTERVAL); */

if (-1 == sendto(cfd, KEY, sizeof(KEY), 0,
(struct sockaddr*)&s_add,
sizeof(s_add))) {
printf("write fail!\n");
return -1;
}
printf("write ok!\n");

/* sleep(TIME_INTERVAL); */

char revmssg[MAX_SIZE];
int len = sizeof(s_add);
if (-1 == recvfrom(cfd, revmssg, MAX_SIZE, 0,
  (struct sockaddr*)&s_add,
  &len)) {
printf("read fail!\n");
return -1;
}
printf("read ok!\n");
printf("revmssg is: %s\n", revmssg);
sleep(TIME_INTERVAL);
}

close(cfd);

return 0;
}

Linux C socket 基于 UDP的更多相关文章

  1. linux下socket编程-UDP

    下面是UDP的服务器的代码: /* server.c */ #include <stdio.h> #include <string.h> #include <netine ...

  2. Linux 简单socket实现UDP通信

    服务器端 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sy ...

  3. Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信

    Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信 背景 上一讲我们介绍了网络编程的一些概念.socket的网络编程的有关概念 这一讲我们来看UDP 通信. 知识 U ...

  4. linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

    单客户端和服务端的通信(基于UDP)   代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...

  5. python 全栈开发,Day34(基于UDP协议的socket)

    昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...

  6. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  7. java Socket编程-基于UDP

    package com.wzy.UDPTest; import java.net.DatagramPacket; import java.net.DatagramSocket; import java ...

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

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  9. 基于Socket的UDP发包程序

    UDP(User Datagram Protocol,用户数据报协议)是在互联网中常用的传输层协议,该协议提供了向另一用户程序发送的消息的最简便的协议机制.与TCP一样,其默认的下层协议是IP.UDP ...

随机推荐

  1. 测试是否是移动端,是否是iphone,是否是安卓

    function isMobile(){ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(na ...

  2. leyou_04_vue.js的ajax请求方式

    1.异步查询数据,自然是通过ajax查询,大家首先想起的肯定是jQuery.但jQuery与MVVM的思想不吻合,而且ajax只是jQuery的一小部分.因此不可能为了发起ajax请求而去引用这么大的 ...

  3. ArcMap应用——三维场景中井盖的属性配置

    在精细三维场景中,有地面(包括道路面.马路牙子).有部件数据(包括井盖).我们会发现有马路牙子的地方比道路面要高出一部分,比如0.1米,但是雨水井盖却有些在路面上.有些在道路以外.就是说在道路面上的井 ...

  4. 用 vue 脚手架 vue-cli 初始化(新建)项目

    前提:已经安装 node.js 和 git 1.在需要创建的文件夹中,右击 -> Git  Bush Here ,然后输入命令 vue init webpack "文件名"( ...

  5. 《DSP using MATLAB》Problem 7.31

    参照Example7.27,因为0.1π=2πf1   f1=0.05,0.9π=2πf2   f2=0.45 所以0.1π≤ω≤0.9π,0.05≤|H|≤0.45 代码: %% +++++++++ ...

  6. HDFS常用Java API

  7. CF538G (套路题)

    CF538G 题目大意 你有一个长度为\(l\)的指令序列,每个指令为向上,向下,向左,向右中的一种. 机器人会循环执行该序列,即,执行完第\(l\)个指令后,就会重新开始执行第一个指令. 现在,给你 ...

  8. C++11的for循环的新用法

    字符串 string str = "this is a string"; for(auto ch : str) cout << ch << endl; 等价 ...

  9. Javascript实现多行字符串

    打开百度首页,进入控制台的时候,我们在console控制台总可以看到一段文字: 这些文字是如何显示在控制台的呢?? Javascript中的函数被看作是一个对象拥有自己的方法,其中一个小方法fn.to ...

  10. Http中GET和POST请求的区别

    https://mp.weixin.qq.com/s/_oLnkDQn3TE7XdFWCT5Img GET请求 GET /books/?sex=man&name=Professional HT ...