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. Java从零开始学四(数据类型)

    一.Java数据类型划分 二.基本数据类型 No. 数据类型 大小/位 可表示的数据范围 1 long(长整数) 64 -9223372036854775808 ~ 92233720368547758 ...

  2. jsp中的js嵌入Extjs与后台action交互

    近期做前台须要和后台交互数据,直接使用js一直没实现.最后使用extjs实现了,extjs代码直接嵌入到jsp的js代码中就可以(0跟jsp里使用extjs一样,须要载入extjs的几个文件) < ...

  3. vue 数组 新增元素 响应式原理 7种方法

    1.问题 思考一个问题,以下代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  4. JqGrid获得所有选中行数据ID数组,获取所有行的ID数组

    获得选中行的ID数组:var ids = $("jqgridtableid").jqGrid('getGridParam','selarrrow'); 获得所有行的ID数组:var ...

  5. TOMCAT清理

      CreateTime--2017年7月10日08:54:00Author:Marydon 如何清理TOMCAT 方式一:通过tomcat的安装目录进行清理 找到TOMCAT的根目录,如图: 实质: ...

  6. Centos6.5生产环境最小化优化配置

    Centos6.5生产环境最小化优化配置,满足业务需求! 01.启动网卡 #centos6.x最小化安装后,网卡默认不是启动状态 ifup eth0  //  ifconfig eth0 up /et ...

  7. 掀开图片显示介绍的css效果

    概述 主要运用到CSS3的3D transform等变换 详细 代码下载:http://www.demodashi.com/demo/10575.html 一.概述 1.主要运用到CSS3的3D tr ...

  8. Android基于TCP的局域网聊天通信

    概述 在同一局域网内,两台设备通过TCP进行通信聊天. 详细 代码下载:http://www.demodashi.com/demo/10567.html 一.准备工作 开发环境 jdk1.8 Ecli ...

  9. 提高PHP编码的一些技巧

    1.不要使用相对路径 例如 require_once('../../lib/some_class.php'); 该方法有很多缺点: 1)它首先查找指定的php包含路径, 然后查找当前目录 2)如果该脚 ...

  10. 禁用root登录以及使用sudo分配权限

    前言 最近一段时间服务器有受到一些挖比特币的人的攻击,这里就简要说明一下提升服务器安全度的做法 禁用root登录 root权限可以说是linux服务器的最高权限,如果我们平常都是直接使用root用户来 ...