Linux C socket 基于 UDP
/*************************************************************************
> 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的更多相关文章
- linux下socket编程-UDP
下面是UDP的服务器的代码: /* server.c */ #include <stdio.h> #include <string.h> #include <netine ...
- Linux 简单socket实现UDP通信
服务器端 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sy ...
- Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信
Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信 背景 上一讲我们介绍了网络编程的一些概念.socket的网络编程的有关概念 这一讲我们来看UDP 通信. 知识 U ...
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
单客户端和服务端的通信(基于UDP) 代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...
- python 全栈开发,Day34(基于UDP协议的socket)
昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- java Socket编程-基于UDP
package com.wzy.UDPTest; import java.net.DatagramPacket; import java.net.DatagramSocket; import java ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- 基于Socket的UDP发包程序
UDP(User Datagram Protocol,用户数据报协议)是在互联网中常用的传输层协议,该协议提供了向另一用户程序发送的消息的最简便的协议机制.与TCP一样,其默认的下层协议是IP.UDP ...
随机推荐
- 测试是否是移动端,是否是iphone,是否是安卓
function isMobile(){ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(na ...
- leyou_04_vue.js的ajax请求方式
1.异步查询数据,自然是通过ajax查询,大家首先想起的肯定是jQuery.但jQuery与MVVM的思想不吻合,而且ajax只是jQuery的一小部分.因此不可能为了发起ajax请求而去引用这么大的 ...
- ArcMap应用——三维场景中井盖的属性配置
在精细三维场景中,有地面(包括道路面.马路牙子).有部件数据(包括井盖).我们会发现有马路牙子的地方比道路面要高出一部分,比如0.1米,但是雨水井盖却有些在路面上.有些在道路以外.就是说在道路面上的井 ...
- 用 vue 脚手架 vue-cli 初始化(新建)项目
前提:已经安装 node.js 和 git 1.在需要创建的文件夹中,右击 -> Git Bush Here ,然后输入命令 vue init webpack "文件名"( ...
- 《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 代码: %% +++++++++ ...
- HDFS常用Java API
- CF538G (套路题)
CF538G 题目大意 你有一个长度为\(l\)的指令序列,每个指令为向上,向下,向左,向右中的一种. 机器人会循环执行该序列,即,执行完第\(l\)个指令后,就会重新开始执行第一个指令. 现在,给你 ...
- C++11的for循环的新用法
字符串 string str = "this is a string"; for(auto ch : str) cout << ch << endl; 等价 ...
- Javascript实现多行字符串
打开百度首页,进入控制台的时候,我们在console控制台总可以看到一段文字: 这些文字是如何显示在控制台的呢?? Javascript中的函数被看作是一个对象拥有自己的方法,其中一个小方法fn.to ...
- Http中GET和POST请求的区别
https://mp.weixin.qq.com/s/_oLnkDQn3TE7XdFWCT5Img GET请求 GET /books/?sex=man&name=Professional HT ...