当前位置: 首页 > news >正文

网络编程学习

思维导图

 代码练习

TCP实现通信

服务器端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_PORT 8910
int main(int argc, const char *argv[])
{//1创建用于监听的套接字int sfd = -1;sfd =socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -1;}printf("sfd = %d\n",sfd);//2绑定ip地址和端口号struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//3启动监听允许客户端连接if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success\n");//4当有客户端发来连接请求后创建新的用于通信的套接字struct sockaddr_in cin;socklen_t socklen = sizeof(cin);int newfd = accept(sfd,(struct sockaddr*)&cin,&socklen);if(newfd==-1){perror("accept error");return -1;}printf("newfd = %d 您有一个新的客户已经上线\n",newfd);printf("客户端IP:%s,端口号为:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5通信套接字与客户端进行数据收发char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));int res =read(newfd,rbuf,sizeof(rbuf));if(res==0){printf("客户端已经下线\n");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);strcat(rbuf," O_o");write(newfd,rbuf,strlen(rbuf));}//6关闭套接字close(newfd);close(sfd);return 0;
}

客户端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_PORT 8910
int main(int argc, const char *argv[])
{//1创建用于通信的套接字文件描述符int cfd = -1; cfd =socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){                                                                                                 perror("socket error");return -1; }   printf("cfd = %d\n",cfd);
//2连接服务器struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//数据收发char wbuf[128]="";while(1){bzero(wbuf,sizeof(wbuf));printf("请输入>>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;//将数据发送给服务器send(cfd,wbuf,strlen(wbuf),0);printf("发送成功\n");//判断发送的数据if(strcmp(wbuf,"quit")==0){break;}//接收服务器发来的消息//清空数据bzero(wbuf,sizeof(wbuf));recv(cfd,wbuf,sizeof(wbuf),0);printf("收到的消息为;%s\n",wbuf);}close(cfd);return 0;
}

效果图

UDP实现通信

服务器端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_port 8910
int main(int argc, const char *argv[])
{int sfd=socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -1;}printf("socket success\n");//绑定IP地址和端口号struct sockaddr_in sin;sin.sin_family =AF_INET;sin.sin_port =htons(SER_port);sin.sin_addr.s_addr =inet_addr(SER_IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//收发数据char rbuf[128]="";struct sockaddr_in cin;socklen_t socklen =sizeof(cin);while(1){bzero(rbuf,sizeof(rbuf));recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&socklen);printf("收到的消息为:%s\n",rbuf);strcat(rbuf," O_o");if(sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,socklen)==-1){perror("sendto error");return -1;}}close(sfd);return 0;
}

 客户端代码

#include <myhead.h>
#define SER_IP "192.168.152.135"
#define SER_PORT 8910
int main(int argc, const char *argv[])
{int cfd=socket(AF_INET,SOCK_DGRAM,0);if(cfd==-1){perror("socket error");return -1;}char wbuf[128]="";struct sockaddr_in sin;sin.sin_family =AF_INET;sin.sin_port =htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);while(1){bzero(wbuf,sizeof(wbuf));printf("请输入>>>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("发送成功\n");bzero(wbuf,sizeof(wbuf));recvfrom(cfd,wbuf,sizeof(wbuf),0,NULL,NULL);printf("收到的消息为:%s\n",wbuf);}close(cfd);return 0;
}

效果图

http://www.lryc.cn/news/308439.html

相关文章:

  • centos物理电脑安装过程(2024年1月)
  • Web自动化测试平台开发---Automated_platform
  • mybatis-plus: 多租户隔离机制
  • 用Socks5代理游戏,绕过“网络海关”去探险
  • SpringBoot整合rabbitmq-直连队列,没有交换机(一)
  • CUDA C:查看GPU设备信息
  • 深度学习如何入门?——从“小白”到“大牛”的深度学习之旅
  • 编译 qsqlmysql.dll QMYSQL driver not loaded
  • Android日历提醒增删改查事件、添加天数不对问题
  • 【力扣hot100】刷题笔记Day15
  • vue-显示数据
  • kali linux常用命令
  • HTML5:七天学会基础动画网页4
  • Web安全之接口鉴权
  • shardingsphere 集成springboot【水平分表】
  • GO 的 Web 开发系列(六)—— 遍历路径下的文件
  • Flutter 处理异步操作并根据异步操作状态动态构建界面的方法FutureBuilder
  • Git教程-Git的基本使用
  • Java解决长度为K子的数组中的的最大和
  • 【手机端测试】adb基础命令
  • 【数据结构】深入探讨二叉树的遍历和分治思想(一)
  • jQuery AJAX get() 和 post() 方法—— W3school 详解 简单易懂(二十四)
  • Linux中如何进行LVM逻辑卷扩容?
  • 现代企业架构框架——应用架构
  • 期货开户保证金保障市场正常运转
  • WebGIS----wenpack
  • 【Maven】Maven 基础教程(二):Maven 的使用
  • mirthConnect忽略HTTPS SSL验证
  • libvirt命名空间xmlns:qemu的使用
  • ywtool check命令及ywtool clean命令