Linux:客户端的实现
写了一个简单的服务器软件,但是没有写客户端。现在我将客户端实现了,其实昨天已经说了客户端的实现步骤了。
步骤:
- socket()
- 初始化
- connet()链接
- 从标准输入读数据fgets()
- 传数据到服务器write()
- 读从服务器返回的数据read()
- 写数据到屏幕上write()
- 关闭socket文件close()
都没有什么新知识的。所以我也就直接贴代码了;
#include
<string.h>
#include
<sys/types.h>
#include
<sys/socket.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<unistd.h>
#include
<sys/stat.h>
#include
<arpa/inet.h>
#include
<netinet/in.h>
#define
ADDR_POST 9527
int main(void)
{
int c_fd; //客户端的socket文件描述符
int len; //从服务器传回的字符串长度
char buf[BUFSIZ]; //储存数据
struct
sockaddr_in clie_addr; //客户端地址结构体
socklen_t addr_len; //客户端地址结构体大小
//创建客户端socket文件,指定IPV4 ,TCP协议
c_fd = socket(AF_INET,SOCK_STREAM,0);
//初始化客户端地址结构体
inet_pton(AF_INET, "127.0.0.1", &clie_addr.sin_addr.s_addr);//将IP字符串转化为网络值存入其中,这个"127.0.0.1"就是客户端的IP,但不一定是公网IP
clie_addr.sin_family = AF_INET;//指定IPV4协议族
clie_addr.sin_port = htons(ADDR_POST);//将服务器的端口转化为网络值存入
connect(c_fd, (struct
sockaddr*)&clie_addr, sizeof(clie_addr));//由地址结构体连接服务器;
//因为地址结构体中有服务器的端口,端口在机器上是唯一的。
//刚接触,其实有很多还是不大明白。我们的服务器软件和客户端软件都是运行在一台机器上的,一台机器中的端口号是唯一的,类似进程号。至于若是服务器软件和客户端位于不同的机器是怎么经过网络找到对应的机器,我就不大清楚了,以后学到了在解惑吧。
while (1)
{
fgets(buf, sizeof(buf), stdin); //从标准输入中读取数据
write(c_fd, buf, strlen(buf)); //写到服务器中c_fd既有接收端又有发送端。
len = read(c_fd, buf, sizeof(buf)); //读从服务器返回的数据
write(STDOUT_FILENO, buf, len); //写到屏幕上
}
close(c_fd);
return 0;
}
其实很简单的。
结果和昨天的示例一样:
。服务器依然是阻塞着的,没啥好看的。
由于客户端不需要固定的端口号,因此不必调用bind(),客户端的端口号由内核自动分配。注意,客户端不是不允许调用bind(),只是没有必要调用bind()固定一个端口号,服务器也不是必须调用bind(),但如果服务器不调用bind(),内核会自动给服务器分配监听端口,每次启动服务器时端口号都不一样,客户端要连接服务器就会遇到麻烦。
客户端和服务器启动后可以使用netstat命令查看链接情况:
netstat -apn|grep 6666
Linux:客户端的实现的更多相关文章
- gitlab的搭建和linux客户端的连接
一.安装 1.新建 /etc/yum.repos.d/gitlab-ce.repo,添加以下内容 1 2 3 4 5 6 7 [gitlab-ce] name=gitlab-ce baseurl=ht ...
- 《samba搭建win客户端和linux客户端的区别》
samba服务的搭建 客户的使用系统的不同也导致测试结果的不同. linux系统客户端: security = user or share smbclient -L //192.168.7.113/w ...
- linux 客户端与linux服务器端连接与文件上传下载
linux客户端连接linux服务器 用ssh 可以用 man ssh 查看用法 基本格式: ssh 用户名@主机名 如: ssh root@1.1.1.1 linux客户端上传文件到 linux 服 ...
- Centos 下安装Zabbix Linux 客户端
今天在linux上安装了客户端,过程如下: (1)下载zabbix客户端软件 wget www.zabbix.com/downloads/2.0.3/zabbix_agents_2.0.3.linux ...
- rsync (windows 服务端,linux客户端)将windows上的数据同步到linux服务器,反之也可
一:总体概述. 1.windows上面首先装CW_rsync_Server.4.1.0_installer,安装时要输入的用户名密码要记住哦!接下来就是找到rsyncd.conf进入配置细节 2.li ...
- 微软Skype Linux客户端全新发布
前两天,微软说要给“Linux 用户带来一个令人兴奋的新闻”,今天,这个新闻来了.它刚刚为 Linux 发布了一个新的 Skype 客户端. 此次发布,微软为 Linux 带来的 Skype 客户端与 ...
- CMDB资产管理系统开发【day26】:linux客户端开发
客户端疑难点及获取流程 1.linux客户端支持2就可以,python3就是很麻烦 难道你要求所有的客户端都上pytho3吗? 现在从bin的入口进去 HouseStark.ArgvHandler(s ...
- 配置Linux客户端使用socks5代理上网
配置Linux客户端使用socks5代理上网 背景 有访问google或者其他海外网站需求的同学可能大都用过或者听过ss,在Windows.Mac.Android.IOS都有现成可用的客户端来协助 ...
- SVN的Windows和Linux客户端操作详解
SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...
- openvpn用户管理、linux客户端配置及企业常用真实案例解析
1.给企业用户分配VPN账户的流程: 添加拨号需要密码的用户 # source vars NOTE: If you run ./clean-all, I will be doing a rm -rf ...
随机推荐
- ROS设备的性价比图
- 0000 - Spring 中常用注解原理剖析
1.概述 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来 ...
- python类的全面介绍
转载:全面介绍python面向对象的编程——类的基础 转载:类的实例方法.静态方法.类方法的区别
- HBase配置性能调优
因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果.所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正. 配置优化 zo ...
- hive之权限问题AccessControlException Permission denied: user=root, access=WR
问题描述:在集群上,用hive分析数据出现如下错误 FAILED: Execution Error, return code from org.apache.hadoop.hive.ql.exec.D ...
- NT平台ADSL拨号连接密码恢复原理
NT平台拨号连接密码恢复原理 创建时间:2004-11-08 更新时间:2004-11-12文章属性:原创文章提交:eyas (eyas_at_xfocus.org)NT平台拨号连接密码恢复原理Aut ...
- C语言中 有符号数、无符号数、整数溢出 (转)
#include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } ...
- 有趣的console.log(console.log输出彩色字,图片等)
亲们支持我的新博客哦==>原文地址 ) 逛网站的时候经常发现很多网站控制台打印了很好玩的内容 比如我的网站 →calamus 或者知乎→ 平时是不是只用console调试或者打印别的信息了,没有 ...
- Docker Basic
1.简介 last 1.简介 1.1目的?一次编译.到处运行: 1.2.是什么? 实现[运行环境和配置文件的]软件容器,方便[持续集成]实现[整体发布]的容器虚拟化技术: 概括:整体发布的[容器虚拟化 ...
- 【Java】边框总结
[Java]边框总结 Table of Contents 1 例子代码与结果 2 javax.swing.border 3 BorderFactory 4 LineBorder 5 MatteBord ...