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 ...
随机推荐
- mongodb 的一些基本命令以及 导入、导出,待更新
基本命令参考: https://blog.csdn.net/cckevincyh/article/details/78702674 导入导出参考:https://blog.csdn.net/djy37 ...
- echarts折现图配置
js引用和div容器 <div id="container" style="height: 100%"></div> <scrip ...
- Windows平台下使用CodeBlocks+GCC编译器生成动态dll,C#调用报错
报无法加载dll错误,解决方法: 1) 编译选择设置成x86,即-m322) 必须在c#程序目录下加上libgcc_s_dw2-1.dll
- Linux下安装python3及相关包
Python3: sudo apt-get install python3 终端中输入python则进入python2,输入python3则进入python3 安装python2的相关包: sudo ...
- delphi正则表达式学习笔记(一)
在 Delphi 中是没有自带的正则表达式库的,在网上能找到的用于 Delphi 的正则表达式类大体上有两个,分别是 PerlRegEx 和 RegExpr. 前者相当强大,但发布程序时需要带上他的一 ...
- session依赖cookie,如果浏览器禁用了cookie呢?
我们都知道session依赖cookie,因为服务器需要在每次请求中获取sessionId,然后找到客户端的session对象,如果浏览器禁用了cookie呢? 这个时候,就需要用到URL重写了,这种 ...
- solr 打分和排序机制(转载)
以下来自solr in action. 包含: 词项频次.查询词项出现在当前查询文档中的次数. 反向文档频次.查询词项出现在所有文档总的次数. 此项权重. 标准化因子: 字段规范: 文档权重. 字段权 ...
- scrapy中 selenium(中间件) + 语言处理 +mysql
在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值.但是通过观察我们会发现,通过 ...
- 硬盘读取不了-->>完美解决
说明:电脑装了两个硬盘,一个固态一个机械,装完系统之后读取不到机械硬盘的数据,网上很多人都说格式化之后分盘,但是!!!里面的数据咋办?千万别自己倒腾转换格式什么的,一不小心数据真的丢了,那就再也找不回 ...
- eclipse创建的maven项目中使用javafx
类似普通maven项目,不需要特地创建javafx项目. 将fxml资源文件放在resource目录下即可.