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 ...
随机推荐
- poj 3263
传送门 解题思路 如果x与y互相看见,那么他们一定比之间的高,所以给他们之间的高度-1,最后得到的答案是所有牛的高度+h,之间-1会T,用差分数组或线段树维护即可. 代码 #include<io ...
- 【一坨理论AC的题】Orz sxy大佬
1.UVA10891 Game of Sum 2.LA4254 Processor . 3.UVA10905 Children's Game 4.UVA11389 The Bus Driver Pro ...
- 19-10-24-H
H H H H H H ZJ一下: T1只会暴力,测试点分治. (表示作者的部分分并没有给够,暴力加部分表按测试点分类可以得60吧……) T2先直接手玩第一个子任务. 然后就$Find$了一个神奇的( ...
- 在sqlserver 的函数或存储过程中抛出异常(raiserror )
raiserror的作用: raiserror 是用于抛出一个错误 其语法如下: RAISERROR ( { msg_id | msg_str | @local_variable } { ,sev ...
- Springboot 之 启动报错-Cannot determine embedded database driver class for database type NONE
Springboot 之 启动报错-数据库 springboot项目在启动时,报如下错误: Error starting ApplicationContext. To display the auto ...
- PHP 缓存详解
为什么要使用缓存 一个网站或者一个应用的标准流程是浏览器向应用服务器发出请求,应用服务器做一些计算和逻辑判断之后再请求数据库,数据库收到请求后在经过计算将数据返回给应用服务器,应用服务器再次计算后把数 ...
- CentOS 7 忘记root密码的修改方法
1.开机按esc 2.选择CentOS Linux (3.10.0-693.......) 按 e 键: 3.光标移动到 linux 16 开头的行,找到 ro 改为 rw init=sysr ...
- svn详解和使用
2 svn介绍 2.1 项目管理中的版本控制问题 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: > 备份多个版本,占用磁盘空间大> 解决 ...
- iOS Bezier曲线
https://www.jianshu.com/p/2316f0d9db65 1. Bezier曲线 相关软件:PaintCode:可以直接画图,软件根据图像生产Bezier曲线 相关概念:UIBez ...
- spring整合http
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接出处:https://blog.csdn.net/qq_3076499,否则保留追究法律责任的权利. 如果 ...