Linux UDP 单任务服务端和客户端实现

服务端

/*
 * main.c
 * 测试udp Socket套接字 单任务服务端代码实现
 *  Created on: 2020年3月4日
 *      Author: LuYonglei
 */

#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define SERVER_PORT 9000   //服务器绑定的端口号

int main(int argc, char **argv) {
    //创建UDP套接字
    int socket_fd = socket(AF_INET, SOCK_DGRAM, 0); //创建UDP套接字,使用IPV4协议
    if (socket_fd < 0) {
        perror("socket_fd create failed");
        exit(1);
    }
    //绑定端口号
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET; //ipv4
    server_addr.sin_port = htons(SERVER_PORT); //设置端口号
    server_addr.sin_addr.s_addr = INADDR_ANY; //通配地址
    int ret = bind(socket_fd, (struct sockaddr*) (&server_addr),
            sizeof(struct sockaddr_in));
    if (ret < 0) {
        perror("bind ip failed");
        exit(1);
    }
    //接受客户端信息
    struct sockaddr_in client_addr; //保存的客户端的ip协议和端口号信息
    socklen_t client_addr_len; //长度
    while (1) {
        char receive_buf[128] = ""; //接收缓冲区
        recvfrom(socket_fd, receive_buf, sizeof(receive_buf), 0,
                (struct sockaddr*) (&client_addr), &client_addr_len); //接受客户端信息
        printf("%s\n", receive_buf); //打印客户端的信息
        sendto(socket_fd, receive_buf, strlen(receive_buf), 0,
                (struct sockaddr*) (&client_addr), client_addr_len); //把接受到的客户端信息再发送给客户端回显
    }
    close(socket_fd);
    return 0;
}

客户端

/*
 * main.c
 * 测试udp Socket套接字 客户端代码
 *  Created on: 2020年3月4日
 *      Author: LuYonglei
 */

#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define SERVER_PORT 9000   //服务器端口号
const char *server_ip_addr = "127.0.0.1"; //服务器ip地址
/*
 * SOCK_STREAM  流式套接字,主要用于TCP
 * SOCK_DGRAM   报式套接字,主要用于UDP
 */
int main(int argc, char **argv) {
    //创建服务器信息结构体
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET; //设置为IPV4
    server_addr.sin_port = htons(SERVER_PORT); //服务器端口号,转换为网络字节流 大端
    inet_pton(AF_INET, server_ip_addr, &(server_addr.sin_addr.s_addr)); //设置服务器ip地址

    //创建UDP套接字
    int socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
    if (socket_fd < 0) {
        perror("socket_fd create failed");
        exit(1);
    }

    while (1) {
        char send_buf[128] = ""; //定义缓冲区
        read(STDIN_FILENO, send_buf, sizeof(send_buf)); //从标准输入读取待发送信息到缓冲区
        send_buf[strlen(send_buf) - 1] = 0; //此处使用来处理输入的换行符
        sendto(socket_fd, send_buf, strlen(send_buf), 0,
                (struct sockaddr*) (&server_addr), sizeof(struct sockaddr_in));
        char receive_buf[128] = "";
        recvfrom(socket_fd, receive_buf, sizeof(receive_buf), 0, NULL, NULL); //从缓冲区读入信息到read_buf
        printf("%s\n", receive_buf);

    }
    close(socket_fd);
    return 0;
}

原文地址:https://www.cnblogs.com/luyl/p/12408955.html

时间: 2024-07-29 15:51:20

Linux UDP 单任务服务端和客户端实现的相关文章

Linux下多进程服务端客户端模型二(粘包问题与一种解决方法)

一.Linux发送网络消息的过程 (1) 应用程序调用write()将消息发送到内核中 ( 2)内核中的缓存达到了固定长度数据后,一般是SO_SNDBUF,将发送到TCP协议层 (3)IP层从TCP层收到数据,会加上自己的包头然后发送出去.一般分片的大小是MTU(含IP包头),而IPV4下IP的包头长度为40,而IPV6下为60,因此,TCP中分片后,有效的数据长度为MSS = MTU - 40 或 MSS = MTU -60 (4)最终经过其他层的包装,发送到公网上,跑来跑去,这时候,你的数据

linux(centos 6.4)下安装php memcache服务端及其客户端(详细教程)

前言 在搭建个人博客时,由于没有使用任何框架,纯手工code前台和后台,导致遇到许多问题,其中一个问题就是mysql连接导致的页面相应速度异常低.在查询各种途径后,只能考虑使用memcache缓存.在参考了许多文章后,终于成功的在centos6.4下安装memcache.由于发现在安装过程中,许多文章在有些细节没有解释清楚,导致我一直卡在一个问题上面.为了帮助其他可能和我遇到了同样问题的娃们,我准备也把我的安装过程详细介绍下,而不是ctrl+c,ctrl+v.希望对大家有帮助.(部分参考www.

QUdpSocket-Qt使用Udp通讯实现服务端和客户端

版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QUdpSocket-Qt使用Udp通讯实现服务端和客户端     本文地址:http://techieliang.com/2017/12/532/ 文章目录 1. QNetworkDatagram 2. 客户端 3. 服务端 4. 消息收发 1. QNetworkDatagram qt网络报文,可用其建立一个通讯内容包括目标ip.端口号.数据内容.同时接收到的信息也未此类型,可以访问接收数

udp 协议 服务端 | udp 客户端

# ### udp 协议 服务端 import socket # socket.SOCK_DGRAM 代表udp协议 sk = socket.socket(type = socket.SOCK_DGRAM) # 绑定地址 sk.bind( ("127.0.0.1",9000) ) # udp作为服务器,第一次一定是先接受消息 msg,cli_addr = sk.recvfrom(1024) print(msg,cli_addr) msg2 = "对,确实不错,因为今天周五&q

关于ntp(时间同步协议)服务端和客户端的配置说明

本文主要写了一些在Linux(CentOS)服务器上配置ntp的经验,事件缘由来源于配置Zabbix监控ntp服务时的测试配置. NTP时间同步协议的服务端(ntpd服务)和客户端(ntpdate服)不能同时运行,即在运行ntpd服务后不能运行ntpdate服务,否则ntpdate服务会提示启动失败,而且日志中也会提示"the NTP socket is in use, exiting",如下图所示. 但客户端运行时,服务端可以运行,但服务端运行时,客户端不能运行,要运行客户端服务,就

socket服务端和客户端

#!/usr/bin/env python#encoding: utf-8import socketdef handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, World") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREA

Java网络编程【Socket服务端和客户端】

Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

用Java实现HTTP Multipart的服务端和客户端

今天简单介绍一下如何用Java支持HTTP Multipart的request和response. 整个项目的代码可以在https://github.com/mcai4gl2/multi下载. 在这个程序里,我们的业务场景很简单.在服务端有一个随机数生成器,可以生成随机的Integer和Guid,客户端通过服务,可以请求一个或多个随机数.同时,客户端可以向服务端发送一个或多个随机数,这些随机数会被加入到一个队列中,被其他的客户端通过请求获得.以下是我们的随机数Bean的定义: [java] vi

C# Socket服务端和客户端互相send和receive

服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net.Sockets; 5 using System.Net; 6 using System.Threading; 7  8 namespace Controller 9 {10     public static class SocketServer11     {12         private stat