网络通信(udp协议)
2011-09-27 15:40
363 查看
用udp协议实现echo服务器(即服务器把收到的内容发送回去)
服务器:socket->bind->(recvfrom->sendto)循环
客户端:socket->connect->(recvfrom->sendto)循环
Server.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAXLINE 50
typedef struct sockaddr SA;
int main(int argc,char **argv)
{
int sockfd;
socklen_t peerlen;
struct sockaddr_in myaddr,peeraddr;
char buf[MAXLINE];
if((sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
printf("fail to socket\n");
exit(-1);
}
bzero(&myaddr,sizeof(myaddr));
myaddr.sin_family=PF_INET;
myaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
myaddr.sin_port=htons(8888);
if(bind(sockfd,(SA *)&myaddr,sizeof(myaddr))<0)
{
printf("fail to bind\n");
exit(-1);
}
while(1)
{
peerlen=sizeof(peeraddr);
recvfrom(sockfd,buf,sizeof(buf),0,(SA *)&peeraddr,&peerlen);
printf("connection from %s,port %d\n",inet_ntoa(peeraddr.sin_addr),ntohs(peeraddr.sin_port));
sendto(sockfd,buf,sizeof(buf),0,(SA *)&peeraddr,sizeof(peeraddr));
}
return 0;
}
Client.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAXLINE 50
typedef struct sockaddr SA;
int main()
{
int sockfd,nbyte;
struct sockaddr_in servaddr;
char buf[MAXLINE]="hello Server";
if((sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
printf("fail to socket\n");
exit(-1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family =PF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(8888);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))<0)
{
printf("fail to connect\n");
exit(-1);
}
sendto(sockfd,buf,sizeof(buf),0,(SA *)&servaddr,sizeof(servaddr));
bzero(buf,sizeof(buf));
recvfrom(sockfd,buf,MAXLINE,0,NULL,NULL);
printf("recv from server:%s\n",buf);
return 0;
}
服务器:socket->bind->(recvfrom->sendto)循环
客户端:socket->connect->(recvfrom->sendto)循环
Server.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAXLINE 50
typedef struct sockaddr SA;
int main(int argc,char **argv)
{
int sockfd;
socklen_t peerlen;
struct sockaddr_in myaddr,peeraddr;
char buf[MAXLINE];
if((sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
printf("fail to socket\n");
exit(-1);
}
bzero(&myaddr,sizeof(myaddr));
myaddr.sin_family=PF_INET;
myaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
myaddr.sin_port=htons(8888);
if(bind(sockfd,(SA *)&myaddr,sizeof(myaddr))<0)
{
printf("fail to bind\n");
exit(-1);
}
while(1)
{
peerlen=sizeof(peeraddr);
recvfrom(sockfd,buf,sizeof(buf),0,(SA *)&peeraddr,&peerlen);
printf("connection from %s,port %d\n",inet_ntoa(peeraddr.sin_addr),ntohs(peeraddr.sin_port));
sendto(sockfd,buf,sizeof(buf),0,(SA *)&peeraddr,sizeof(peeraddr));
}
return 0;
}
Client.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAXLINE 50
typedef struct sockaddr SA;
int main()
{
int sockfd,nbyte;
struct sockaddr_in servaddr;
char buf[MAXLINE]="hello Server";
if((sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
printf("fail to socket\n");
exit(-1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family =PF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(8888);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))<0)
{
printf("fail to connect\n");
exit(-1);
}
sendto(sockfd,buf,sizeof(buf),0,(SA *)&servaddr,sizeof(servaddr));
bzero(buf,sizeof(buf));
recvfrom(sockfd,buf,MAXLINE,0,NULL,NULL);
printf("recv from server:%s\n",buf);
return 0;
}
相关文章推荐
- 通过套接字(socket)和UDP协议实现网络通信
- 无线网络中传输层通信协议分析与比较(TCP与UDP)
- 26 API-网络编程(网络概述,Socket通信机制,UDP协议发送和接收数据,TCP协议发送和接收数据)
- 【网络】常见通信协议HTTP、TCP、UDP的简单介绍
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
- 网络通信协议-UDP
- 疯狂java UDP协议的网络通信
- 使用C#实现基于TCP和UDP协议的网络通信程序的基本示例
- UDP: 用Socket 实现UDP 协议下的网络通信
- TCP、UDP协议,java网络通信基础
- 13.进程间通信---网络通信(TCP协议和UDP协议的比较)
- 网络编程的概述2 网络通信中的三要素3 InetAddress的概述和测试,IP地址:InetAddress 传输协议(网络协议)TCP 可靠协议,需要连接,效率会稍低 没有大小的限制UDP 不:
- linux网络通信-------UDP协议
- UDP网络通信OSC 协议
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- 【面试常见问题】网络通信 - TCP协议与UDP协议的区别
- 通过套接字(socket)和UDP协议实现网络通信
- 记录:网络通信协议中的TCP/IP与UDP