/*************************************************************************
    > 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. sql 2000 or sql2005 数据库日志删除

    数据库日志清理(sql 2000 or sql2005)DUMP TRANSACTION crm WITH NO_LOGBACKUP LOG crm WITH NO_LOGDBCC SHRINKDAT ...

  2. [转]【全面解禁!真正的Expression Blend实战开发技巧】第八章 FluidMoveBehavior完全解析之一漂浮移动

    好久没更新博客了,今天如果没急事,准备连发三篇,完全讲解Blend最牛的元素-“FluidMoveBehavior”.我向大家保证这三章一定非常精彩,不看你肯定后悔.我相信这三篇文章发表后,国内很多s ...

  3. Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了

    阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版.Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架, ...

  4. 浏览器标准模式与怪异模式-CSS1Compat and BackCompat

    由于历史的原因,各个浏览器在对页面的渲染上存在差异,甚至同一浏览器在不同版本中,对页面的渲染也不同.在W3C标准出台以前,浏览器在对页面的渲染上没有统一规范,产生了差异(Quirks mode或者称为 ...

  5. 用Python输出一个杨辉三角的例子

    用Python输出一个杨辉三角的例子 这篇文章主要介绍了用Python和erlang输出一个杨辉三角的例子,同时还提供了一个erlang版杨辉三角,需要的朋友可以参考下 关于杨辉三角是什么东西,右转维 ...

  6. CSS3属性transform详解【转载】

    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)   在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...

  7. Maven实战04_使用Archetype生成项目骨架

    在上一章中的HelloWorld中,我们的项目遵循了一些Maven项目的约定 在项目的根目录中放置pom.xml 在src/main/java目录中放置项目的主代码 在src/test/java目录中 ...

  8. day65——day69

    目录 DAY65 课堂笔记 1.vue实例 2.插值表达式 3.文本指令 4.面向对象js 5.js函数补充 6.事件指令 7.属性指令 DAY66 课堂笔记 1.表单指令 2.条件指令 3.循环指令 ...

  9. Hibernate-实体-对象状态-一级缓存-事务-查询

    一 hibernate中的实体规则 1.1 实体类创建的注意事项 持久化类提供无参数构造         --在调用instance()方法时默认调用空参构造 成员变量私有,提供共有get/set方法 ...

  10. c++新特性实验(2)类型特性

    1. 基本类型 1.1 增加 long long long long int signed long long signed long long int unsigned long long unsi ...