服务器端

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h> #define MAXLINE 80
#define SERV_PORT 8888 void do_echo( int sockfd, struct sockaddr *pcliaddr, socklen_t client )
{
int n;
socklen_t len;
char mesg[];
while ()
{
len = client;
n = recvfrom( sockfd, mesg, , , pcliaddr, &len );
sendto( sockfd, mesg, n, , pcliaddr, len );
mesg[n] = ;
fputs( mesg, stdout );
}
return;
} int main( void )
{
int sockfd;
struct sockaddr_in servaddr, cliaddr;
sockfd = socket( AF_INET, SOCK_DGRAM, );
bzero( &servaddr, sizeof(servaddr) );
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
if ( bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == - )
{
perror("bind error");
exit();
}
do_echo( sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr) );
return ;
}

客户端

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h> #define MAXLINE 80
#define SERV_PORT 8888 void do_cli( FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen )
{
int n;
char sendline[MAXLINE], recvline[MAXLINE + ];
if ( connect( sockfd, (struct sockaddr *)pservaddr, servlen ) == - )
{
perror("connect error");
exit();
} while ( fgets(sendline, MAXLINE, fp ) != NULL )
{
write( sockfd, sendline, strlen(sendline) );
n = read( sockfd, recvline, MAXLINE );
if ( n == - )
{
perror("read error");
exit();
}
recvline[n] = ;
fputs( recvline, stdout );
}
return;
} int main( int argc, char **argv )
{
int sockfd;
struct sockaddr_in servaddr;
if ( argc != )
{
printf("usage: udpclient <IPaddress>\n");
exit();
} bzero( &servaddr, sizeof(servaddr) );
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT); if ( inet_pton(AF_INET, argv[], &servaddr.sin_addr ) <= )
{
printf("[%s] is not a valid IPaddress\n", argv[]);
exit();
} sockfd = socket(AF_INET, SOCK_DGRAM, );
do_cli( stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr) );
return ;
}

最新文章

  1. BootStrap学习笔记,优缺点总结
  2. console的花式用法
  3. git 放弃本地某个文件的修改,或所有修改
  4. NX图标
  5. BufferedReader,缓冲输入字符流
  6. LiBsvm用于多分类时训练模型参数含义
  7. linux vi查找命令
  8. hibernate它 11.many2many双向
  9. OutputStream类详解
  10. 异步获取CMD命令行输出内容
  11. 读《淘宝技术这十年》 总结下web架构的发展
  12. JAVA调用数据库存储过程
  13. 四十二、Linux 线程——线程同步之条件变量之线程状态转换
  14. python网页爬虫开发之二
  15. SqlServer2005 海量数据 数据表分区解决难题
  16. Gitlab权限管理
  17. Android Activity 无法获取组件尺寸
  18. 用node.js进行微信公众平台的开发
  19. python基础之模块二
  20. OpenCV3计算机视觉+Python(五)

热门文章

  1. AngularJS表格排序
  2. Openresty最佳案例 | 汇总
  3. selenium之css定位
  4. 对TCP三次握手四次分手还不清楚,超简单解析
  5. 关于truthy 和 falsy
  6. 【TOJ 3305】Hero In Maze II
  7. jQuery-qrcode.js 生成带Logo 的二维码
  8. JavaScript -- 继承与原型链
  9. Java源码解析——集合框架(三)——Vector
  10. Hadoop(4)-Hadoop集群环境搭建