udp_server.c

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <string.h> #define SERV_PORT 49130
#define MAXLINE 80 int main()
{
int sockfd;
struct sockaddr_in servaddr, cliaddr;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int cliaddr_len;
int n, i; if ((sockfd = socket(AF_INET, SOCK_DGRAM, )) < ) {
perror("socket");
exit();
} bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT); // 一定要使用htons函数将端口转换为大端格式 if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < ) {
perror("bind");
exit();
} printf("Accepting connections...\n"); while () {
cliaddr_len = sizeof(cliaddr);
n = recvfrom(sockfd, buf, MAXLINE, , (struct sockaddr *)&cliaddr, &cliaddr_len);
if (n == -) {
perror("recvfrom err");
}
// print source address's ip,port
printf("Received from %s at PORT %d, recvlen is: %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)), ntohs(cliaddr.sin_port), n); for (i = ; i < n; i++)
buf[i] = toupper(buf[i]);
n = sendto(sockfd, buf, n, , (struct sockaddr *)&cliaddr, sizeof(cliaddr));
// printf("send length is: %d\n", n);
if (n == -) {
perror("sendto err");
}
} close(sockfd);
return ;
}

udp_client.c

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h> #define MAXLINE 80
#define SERV_PORT 49130 static const char *SERV_ADDR = "127.0.0.1"; int main()
{ int sockfd;
char buf[MAXLINE];
struct sockaddr_in servaddr;
int n, i; bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, SERV_ADDR, &servaddr.sin_addr);
servaddr.sin_port = htons(SERV_PORT); if ((sockfd = socket(AF_INET, SOCK_DGRAM, )) < ) {
perror("socket");
exit();
} while (fgets(buf, MAXLINE, stdin) != NULL) {
n = sendto(sockfd, buf, strlen(buf), , (struct sockaddr *)&servaddr, sizeof(servaddr));
if (n == -) {
perror("sendto err");
} n = recvfrom(sockfd, buf, MAXLINE, , NULL, );
if (n == -) {
perror("recvfrom err");
} //printf("recv len is: %d\n", n);
write(STDOUT_FILENO, buf, n);
} close(sockfd);
return ;
}

先运行Server, 再运行Client,在client输入:

yongdaimi@ubuntu:~/Documents/code$ gcc udp_client.c -o client
yongdaimi@ubuntu:~/Documents/code$ ./client
java
JAVA
j2sdk
J2SDK
jdbc
JDBC
cpp
CPP
jni
JNI

Server:

Accepting connections...
Received from 127.0.0.1 at PORT 45162, recvlen is: 3
Received from 127.0.0.1 at PORT 51366, recvlen is: 3
Received from 127.0.0.1 at PORT 51366, recvlen is: 5
Received from 127.0.0.1 at PORT 51366, recvlen is: 5
Received from 127.0.0.1 at PORT 57741, recvlen is: 5
Received from 127.0.0.1 at PORT 51904, recvlen is: 5
Received from 127.0.0.1 at PORT 51904, recvlen is: 6
Received from 127.0.0.1 at PORT 51904, recvlen is: 5
Received from 127.0.0.1 at PORT 51904, recvlen is: 4
Received from 127.0.0.1 at PORT 51904, recvlen is: 4

Socket相关函数(2)- sendto(), recvfrom() UDP模型的更多相关文章

  1. 网络编程基础socket 重要中:TCP/UDP/七层协议

    计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...

  2. python网络编程socket编程(TCP、UDP客户端服务器)

    摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...

  3. 套接字I/O函数write/read writev/readv send/recv sendto/recvfrom sendmsg/recvmsg

    函数原型 read/write系原型 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); #include ...

  4. socket | tcp客户端 tcp服务器 udp客户端 udp 服务器 创建方法

    tcp服务器 #coding=utf-8 ''' 这里是tcp服务器端,要先启动 ''' import socket import threading bind_ip = "0.0.0.0& ...

  5. socket通讯,TCP,UDP,HTTP的区别

    socket编程有TCP和UDP, TCP:传送控制协议(Transmission Control Protocol) 传输控制协议TCP是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机 ...

  6. Socket小白篇-附加TCP/UDP简介

    Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...

  7. 计算机网络(十三),Socket编程实现TCP和UDP

    十三.Socket编程实现TCP和UDP 1.TCP (1)TCPServer.java类 package com.interview.javabasic.socket; import com.int ...

  8. C语言sendto()函数-经socket传送数据以及recvfrom函数《转》

    相关函数:send, sendmsg, recv, recvfrom, socket 头文件:#include <sys/types.h>   #include <sys/socke ...

  9. Socket相关函数(1)- socket(), bind(), listen(), accept(), connect(), TCP模型

    tcp_server.c #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #in ...

随机推荐

  1. 算法笔记_172:历届试题 波动数列(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...

  2. vue 项目的开发流程

    1.$ node -v (检测node版本,node版本需要在 V4 以上) 2.全局安装vue $ npm install -g vue 3.安装脚手架 $ npm install -g vue-c ...

  3. [C#]记录程序耗时的方法【转发】

    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); // H ...

  4. python中的多态

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python中的多态 #多态:一个操作的意义取决于被操作对象的类型,相同的消息给予不同的对象会引发不同的动作 ...

  5. 通过配置Apache实现404页面替换

    一.通用情况--修改apache配置.htaccess 一般网站报404原因都是找不到资源,是服务器(以Apache为例)报错,Apache自定义了404输出,我们的目的是使用自定义的404.html ...

  6. 很轻很强大:轻量级桌面环境比较(转自linuxeden)

    这天你终于下定决心购买了一台流行的 Netbook ,与往常装机一样,直接安装心爱的 Linux 发行版.好不容易安装完成了,却发现平日启动飞快的应用程序在 Netbook 上怎么都跑不快.怎么办呢? ...

  7. 【LeetCode】47. Permutations II

    Permutations II Given a collection of numbers that might contain duplicates, return all possible uni ...

  8. C# 如何调试安装包

    在需要调试的地方插入如下代码即可启动调试:  System.Diagnostics.Debugger.Launch();

  9. 跨域在嵌入页面iframe中设置cookie

    在IIS  HTTP响应头 中 添加: 名称:p3p 值:CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"

  10. RHEL7 -- 识别文件系统和设备

    逻辑卷依赖于设备映射程序(DM)内核驱动程序. 比如有个逻辑卷组rhel中有一个逻辑卷root,对应的设备为/dev/rhel/root.符号链接/dev/rhel/root指向/dev/dm-< ...