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

Linux--socket编程--服务端代码

查看struct sockaddr_in包含的东西:
在/user/include下搜索:grep "struct sockaddr_in { " * -nir
r : 递归
i : 不区分大小写
n : 显示行号

socket编程–服务端代码

/*
1、调用 socket 创建套接字
2、调用 bind 添加地址
3、listen 监听
4、accept 连接
5、read
6、write
*/#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include <linux/in.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>int main()
{int s_fd;//1、创建套接字 sockets_fd = socket(AF_INET,SOCK_STREAM,0);//用到IPV4,TCP协议,0自动配合起来if(s_fd == -1){						//返回-1,错误perror("socket");exit(-1);}//2、添加地址 bind		struct sockaddr_in s_addr;		//定义结构体s_addr.sin_family = AF_INET;	//协议族s_addr.sin_port = htons(8989);	//端口号,一般为5000--9000//电脑为x86是小端字节序,网络字节序为大端字节序。所以要进行转换用htonsinet_aton("172.0.0.1",&s_addr.sin_addr);//把字符串形式的127.0.0.1转换成网络能识别的格式。用到inet_atonbind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct socket_in));//3、监听listenlisten(s_fd,10);//监听10个//4、连接 acceptint c_fd = accept(s_fd,NULL,NULL);//连接到客户端之后,后续的操作用返回值c_fd来操作//5、read//6、writeprintf("connect\n");//数据连接之后打印while(1);return 0;
}

编译运行此代码;
windos+R 输入cmd指令,然后ping + ip是否接通;通过之后,输入telnet + ip + 端口号。则该服务器连接客户端成功代码向下运行,打印出connect字符。

windos10系统默认不开启telnet,需要查询开启方法进行开启,再使用该命令。

数据互通:

/*
1、调用 socket 创建套接字
2、调用 bind 添加地址
3、listen 监听
4、accept 连接
5、read
6、write
*/#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include <linux/in.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>int main()
{int s_fd;int n_read;char redBuf[128];char *retmessage = "I get your message!\n";struct sockaddr_in s_addr;		//定义结构体struct sockaddr_in c_addr;//数据清空memset(&s_addr,0,sizeof(struct sockaddr_in));memset(&c_addr,0,sizeof(struct sockaddr_in));//1、创建套接字 sockets_fd = socket(AF_INET,SOCK_STREAM,0);//用到IPV4,TCP协议,0自动配合起来if(s_fd == -1){						//返回-1,错误perror("socket");exit(-1);}//2、添加地址 bind		s_addr.sin_family = AF_INET;	//协议族s_addr.sin_port = htons(8989);	//端口号,一般为5000--9000//电脑为x86是小端字节序,网络字节序为大端字节序。所以要进行转换用htonsinet_aton("172.0.0.1",&s_addr.sin_addr);//把字符串形式的127.0.0.1转换成网络能识别的格式。用到inet_atonbind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct socket_in));//3、监听listenlisten(s_fd,10);//监听10个//4、连接 acceptint clen = sizeof(struct socket_in);int c_fd = accept(s_fd,(struct sockaddr *)&c_addr ,&clen);//连接到客户端之后,后续的操作用返回值c_fd来操作if(c_fd == -1){perror("accept");}printf("get connect : %s\n",inet_ntoa(c_addr.sin_addr));//把网络格式的IP转换为字符格式//5、readn_read = read(c_fd,redBuf,128);if(n_read == -1){perror("read");}else{printf("get message : %d,%s\n",n_read,redBuf);}//6、writewrite(c_fd,retmessage,strlen(retmessage));return 0;
}

在新的界面,telnet + ip + 端口号,实现连接

输出结果:

Trying 172.0.0.1...
Connected to 172.0.0.1.
Escape character is '^]'.
laowang
I get your message!
Connection closed by foreign host.

另一个界面:

get connect : 172.0.0.1
get message : 8,laowang
http://www.lryc.cn/news/181453.html

相关文章:

  • 安装Vue脚手架图文详解教程
  • 宠物医院必备,介绍一款宠物疫苗接种管理软件
  • 哈哈,我保研985了,之后会出一期保研经验分享
  • C++ 程序员入门之路——旅程的起点与挑战
  • C/C++ 数组面试算法题
  • 【pwn入门】用gdb实现第1个pwn
  • 用pyinstaller打包LGBM模型为ELF/EXE可执行文件
  • 软考中级—— 操作系统知识
  • 我们是否真的需要k8s?
  • 基于蜉蝣优化的BP神经网络(分类应用) - 附代码
  • 前端系列-1 HTML+JS+CSS基础
  • Learning Invariant Representation for Unsupervised Image Restoration
  • 1.4.C++项目:仿muduo库实现并发服务器之buffer模块的设计
  • AndroidStudio精品插件集
  • java图书管理系统
  • 大屏自适应容器组件-Vue3+TS
  • java图书信息管理
  • apache服务器出现No input file specified.解决方案
  • 你写过的最蠢的代码是?——全栈开发篇
  • 正点原子嵌入式linux驱动开发——TF-A初探
  • 【网安别学成开发】之——python篇
  • vue图片显示
  • S32K144 GPIO编程
  • 域名备案流程(个人备案,腾讯云 / 阿里云)
  • 子网ip和子网掩码的关系
  • openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT
  • 网络-Ajax
  • Autowired和Resource的关系
  • HashTable, HashMap, ConcurrentHashMap 之间的区别
  • Maven下载源码出现:Cannot download sources Sources not found for org.springframwork...