Unix c 网络编程 UDP
来源:互联网 发布:网络拓扑图图片 编辑:程序博客网 时间:2024/05/22 07:09
服务器端:
===============================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <netdb.h>
#include <memory.h>
#include <time.h>
int sockfd;
void out_addr(struct sockaddr_in addr)
{
char ip[16];
unsigned short port = ntohs(addr.sin_port);
inet_ntop(AF_INET, &addr.sin_addr.s_addr,
ip, sizeof(addr));
printf("ip:%s(%u) connect...\n",ip, port);
}
void do_service(struct sockaddr_in addr)
{
long t = time(0);
char* s = ctime(&t);
if(sendto(sockfd, s, strlen(s), 0,
(struct sockaddr*)&addr,sizeof(addr))<0)
{
fprintf(stderr, "sendto:%s\n",strerror(errno));
return;
}
}
int main(int argc, char*argv[])
{
if(argc < 2){
fprintf(stderr, "usage: %s port\n",
strerror(errno));
exit(1);
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0){
fprintf(stderr, "socket:%s\n",
strerror(errno));
exit(1);
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[1]));
addr.sin_addr.s_addr = INADDR_ANY;
if(bind(sockfd, (struct sockaddr*)&addr,
sizeof(addr)) < 0){
fprintf(stderr, "bind:%s\n",strerror(errno));
exit(1);
}
char buffer[512];
memset(buffer, 0, 512);
struct sockaddr_in caddr;
int len = sizeof(caddr);
while(1){
if(recvfrom(sockfd, buffer, sizeof(buffer),
0, (struct sockaddr*)&caddr, &len)<0){
fprintf(stderr, "recvform:%s\n",
strerror(errno));
continue;
}
do_service(caddr);
out_addr(caddr);
}
return 0;
}
===============================================================================================
客户端:
===============================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <memory.h>
#include <unistd.h>
#include <fcntl.h>
int sockfd;
int main(int argc, char*argv[])
{
if(argc < 3){
fprintf(stderr, "usage:%s ip port\n",
strerror(errno));
exit(1);
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0){
fprintf(stderr, "socket:%s\n",strerror(errno));
exit(1);
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[2]));
inet_pton(AF_INET, argv[1],
&addr.sin_addr.s_addr);
char buffer[512];
sendto(sockfd, buffer, sizeof(buffer),
0, (struct sockaddr*)&addr, sizeof(addr));
memset(buffer, 0, sizeof(buffer));
ssize_t n;
if((n=recv(sockfd, buffer, sizeof(buffer), 0))< 0)
{
fprintf(stderr, "recv:%s\n", strerror(errno));
close(sockfd);
exit(1);
}else
{
if(write(STDOUT_FILENO, buffer, n)!=n)
{
fprintf(stderr, "write:%s\n",
strerror(errno));
close(sockfd);
exit(1);
}
}
close(sockfd);
}
===============================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <netdb.h>
#include <memory.h>
#include <time.h>
int sockfd;
void out_addr(struct sockaddr_in addr)
{
char ip[16];
unsigned short port = ntohs(addr.sin_port);
inet_ntop(AF_INET, &addr.sin_addr.s_addr,
ip, sizeof(addr));
printf("ip:%s(%u) connect...\n",ip, port);
}
void do_service(struct sockaddr_in addr)
{
long t = time(0);
char* s = ctime(&t);
if(sendto(sockfd, s, strlen(s), 0,
(struct sockaddr*)&addr,sizeof(addr))<0)
{
fprintf(stderr, "sendto:%s\n",strerror(errno));
return;
}
}
int main(int argc, char*argv[])
{
if(argc < 2){
fprintf(stderr, "usage: %s port\n",
strerror(errno));
exit(1);
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0){
fprintf(stderr, "socket:%s\n",
strerror(errno));
exit(1);
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[1]));
addr.sin_addr.s_addr = INADDR_ANY;
if(bind(sockfd, (struct sockaddr*)&addr,
sizeof(addr)) < 0){
fprintf(stderr, "bind:%s\n",strerror(errno));
exit(1);
}
char buffer[512];
memset(buffer, 0, 512);
struct sockaddr_in caddr;
int len = sizeof(caddr);
while(1){
if(recvfrom(sockfd, buffer, sizeof(buffer),
0, (struct sockaddr*)&caddr, &len)<0){
fprintf(stderr, "recvform:%s\n",
strerror(errno));
continue;
}
do_service(caddr);
out_addr(caddr);
}
return 0;
}
===============================================================================================
客户端:
===============================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <memory.h>
#include <unistd.h>
#include <fcntl.h>
int sockfd;
int main(int argc, char*argv[])
{
if(argc < 3){
fprintf(stderr, "usage:%s ip port\n",
strerror(errno));
exit(1);
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0){
fprintf(stderr, "socket:%s\n",strerror(errno));
exit(1);
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[2]));
inet_pton(AF_INET, argv[1],
&addr.sin_addr.s_addr);
char buffer[512];
sendto(sockfd, buffer, sizeof(buffer),
0, (struct sockaddr*)&addr, sizeof(addr));
memset(buffer, 0, sizeof(buffer));
ssize_t n;
if((n=recv(sockfd, buffer, sizeof(buffer), 0))< 0)
{
fprintf(stderr, "recv:%s\n", strerror(errno));
close(sockfd);
exit(1);
}else
{
if(write(STDOUT_FILENO, buffer, n)!=n)
{
fprintf(stderr, "write:%s\n",
strerror(errno));
close(sockfd);
exit(1);
}
}
close(sockfd);
}
0 0
- Unix c 网络编程 UDP
- unix 网络编程--UDP
- 【C语言】【unix c】基于UDP的网络编程
- unix网络编程之udp
- 《UNIX网络编程》UDP网络编程基础
- unix网络编程之一TCP/UDP
- UNIX 网络编程测试代码 -- UDP通信
- UNIX网络编程--实现并发UDP服务器
- UNIX网络编程----UDP客户端和服务器端
- Unix网络编程之UDP实例
- unix 网络编程---select回射TCP,UDP
- UNIX网络编程笔记(6)—UDP网络编程
- Unix c 网络编程 TCP
- Unix网络编程—基本UDP套接字编程
- UNIX网络编程——UDP编程模型
- Linux/UNIX网络编程笔记(四)-UDP编程
- UNIX网络编程——基本UDP套接字编程
- Linux/Unix网络编程之UDP的connect函数
- 2015清华特奖答辩观后感
- LightOJ 1354 IP Checking (水)
- Unix c 网络编程 TCP
- 知道的越多,思考得越深,下的决策越正确
- HDU 4515 模拟
- Unix c 网络编程 UDP
- iOS开发计算文本尺寸
- uva 10167
- 汇编语言-[BX]和loop指令
- nyoj914Yougth的最大化【二分+贪心】
- Golang学习笔记 (一)
- poj 2406 Power Strings
- 凸优化中的数学基础知识(范数篇一)内积,欧式范数
- iOS UIView的常见属性