Socket相关函数(2)- sendto(), recvfrom() UDP模型
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模型的更多相关文章
- 网络编程基础socket 重要中:TCP/UDP/七层协议
计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...
- python网络编程socket编程(TCP、UDP客户端服务器)
摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...
- 套接字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 ...
- socket | tcp客户端 tcp服务器 udp客户端 udp 服务器 创建方法
tcp服务器 #coding=utf-8 ''' 这里是tcp服务器端,要先启动 ''' import socket import threading bind_ip = "0.0.0.0& ...
- socket通讯,TCP,UDP,HTTP的区别
socket编程有TCP和UDP, TCP:传送控制协议(Transmission Control Protocol) 传输控制协议TCP是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机 ...
- Socket小白篇-附加TCP/UDP简介
Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...
- 计算机网络(十三),Socket编程实现TCP和UDP
十三.Socket编程实现TCP和UDP 1.TCP (1)TCPServer.java类 package com.interview.javabasic.socket; import com.int ...
- C语言sendto()函数-经socket传送数据以及recvfrom函数《转》
相关函数:send, sendmsg, recv, recvfrom, socket 头文件:#include <sys/types.h> #include <sys/socke ...
- Socket相关函数(1)- socket(), bind(), listen(), accept(), connect(), TCP模型
tcp_server.c #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #in ...
随机推荐
- Linux内核二层数据包接收流程
本文主要讲解了Linux内核二层数据包接收流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了二层数据包接收的流程,希望可以对大家有所帮助.阅 ...
- oracl 、mysql在线查看文档
Oracle .mysql在线开发文档: http://www.runoob.com/sql/sql-union.html
- iOS——Quartz2D
0. 复习. 1.基本图形绘制 * 线段(线宽.线段样式) * 矩形(空心.实心.颜色) * 三角形.四边形等形状 1> 说明 - (void)drawRect:(CGRect)rect 什么时 ...
- CSS3 calc()函数使用
1.calc是什么? calc是英文单词calculate(计算)的缩写,用于动态计算长度值. calc()函数支持 "+", "-", "*&quo ...
- js 面向对象式编程
1.声明一个函数,在函数内进行初始化操作,,函数不能有返回值2.把需要的参数传递进去,参数最好以对象形式传入,如果有默认的设置默认参数3.把传入的参数都保存到对象的属性上面4.把初始化操作中需要用到的 ...
- Filezilla开源FTP传输工具
生于忧患,死于安乐!在进取中思考... 官网:https://filezilla-project.org/ #FileZilla截图 免费.开源的FTP链接工具! 云下载: http://pan.ba ...
- QQ网页链接打开本地QQ.exe原理
一.观察现象 QQ推广上有相关文档 http://shang.qq.com/v3/widget.html 新建一个html,点击链接就会启动本地QQ. <html> <body> ...
- Pandas中DataFrame修改列名
Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...
- 调试解决iOS内存泄漏
这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用. 本文假设你已经比较熟悉Obj-C的内存管理机制. 实验的开发环境:X ...
- HDU 1757 A Simple Math Problem (矩阵乘法)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...