写了一个简单的服务器软件,但是没有写客户端。现在我将客户端实现了,其实昨天已经说了客户端的实现步骤了。

步骤:

  1. socket()
  2. 初始化
  3. connet()链接
  4. 从标准输入读数据fgets()
  5. 传数据到服务器write()
  6. 读从服务器返回的数据read()
  7. 写数据到屏幕上write()
  8. 关闭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:客户端的实现的更多相关文章

  1. gitlab的搭建和linux客户端的连接

    一.安装 1.新建 /etc/yum.repos.d/gitlab-ce.repo,添加以下内容 1 2 3 4 5 6 7 [gitlab-ce] name=gitlab-ce baseurl=ht ...

  2. 《samba搭建win客户端和linux客户端的区别》

    samba服务的搭建 客户的使用系统的不同也导致测试结果的不同. linux系统客户端: security = user or share smbclient -L //192.168.7.113/w ...

  3. linux 客户端与linux服务器端连接与文件上传下载

    linux客户端连接linux服务器 用ssh 可以用 man ssh 查看用法 基本格式: ssh 用户名@主机名 如: ssh root@1.1.1.1 linux客户端上传文件到 linux 服 ...

  4. Centos 下安装Zabbix Linux 客户端

    今天在linux上安装了客户端,过程如下: (1)下载zabbix客户端软件 wget www.zabbix.com/downloads/2.0.3/zabbix_agents_2.0.3.linux ...

  5. rsync (windows 服务端,linux客户端)将windows上的数据同步到linux服务器,反之也可

    一:总体概述. 1.windows上面首先装CW_rsync_Server.4.1.0_installer,安装时要输入的用户名密码要记住哦!接下来就是找到rsyncd.conf进入配置细节 2.li ...

  6. 微软Skype Linux客户端全新发布

    前两天,微软说要给“Linux 用户带来一个令人兴奋的新闻”,今天,这个新闻来了.它刚刚为 Linux 发布了一个新的 Skype 客户端. 此次发布,微软为 Linux 带来的 Skype 客户端与 ...

  7. CMDB资产管理系统开发【day26】:linux客户端开发

    客户端疑难点及获取流程 1.linux客户端支持2就可以,python3就是很麻烦 难道你要求所有的客户端都上pytho3吗? 现在从bin的入口进去 HouseStark.ArgvHandler(s ...

  8. 配置Linux客户端使用socks5代理上网

    配置Linux客户端使用socks5代理上网   背景 有访问google或者其他海外网站需求的同学可能大都用过或者听过ss,在Windows.Mac.Android.IOS都有现成可用的客户端来协助 ...

  9. SVN的Windows和Linux客户端操作详解

    SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...

  10. openvpn用户管理、linux客户端配置及企业常用真实案例解析

    1.给企业用户分配VPN账户的流程: 添加拨号需要密码的用户 # source vars NOTE: If you run ./clean-all, I will be doing a rm -rf ...

随机推荐

  1. go语言学习--go中闭包

    Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用. 使用方法如下: package main import ( "fmt" ) func main() { var v f ...

  2. [UE4]位与字节

    位 1.bit,比特 2.一个位可以表示两个值,0或者1(一个位只能表示0或者1,并不是能同时表示0和1). 3.一个位为什么只能是2个值,而不能是3个值呢?这是由于技术因素造成的,在硬件中,如果用一 ...

  3. [UE4]角度和弧度

    1角度 = 一个圆周的1/360 1弧度 = 长度为半径的弧,其所对的圆心角

  4. 让android程序根据重力感应旋转屏幕(支持4个方向旋转)

    原文地址:http://blog.csdn.net/yixiaoqingyuz/article/details/6453798代码如下: ChangeOrientationHandler.java p ...

  5. 使用SecureCRT软件运维的配置习惯

    使用 SecureCRT 软件运维的配置习惯 作者:Eric 微信:loveoracle11g 选项--->全局选项 配置文件存放路径 默认CRT配置的配置文件在C盘 常规--->默认会话 ...

  6. tp5生成小程序推广二维码

    //获取用户经销商信息 及生成推广二维码 public function qrcode() { //拿到openid 查找用户表内是否有该用户 没有则拒绝生成二维码 有则查看是否已生成二维码 有生成则 ...

  7. 百度翻译API(C#)

    百度翻译开放平台:点击打开链接 1. 定义类用于保存解析json得到的结果 public class Translation { public string Src { get; set; } pub ...

  8. 使用vim时生成的.swp文件

    1. 在使用vim时,退出编辑后,发现生成了swp文件,如下: 发现用vim打开一个文件时,都会产生一个.swp的隐藏文件(即文件名.开头的),这个文件是一个临时交换文件,用来备份缓冲区中的内容,用于 ...

  9. 免安装版本Mysql配置

    免安装版本mysql配置如下:(本人使用的是5.6.42) 1. 解压后将/bin目录配置在系统变量中 2. 在mysql目录下新建my.ini文件配置如下信息: [mysqld] basedir=D ...

  10. linux rabbitmq 远程登录

    ./rabbitmqctl add_user admin1 admin1 ./rabbitmqctl set_user_tags admin1 administrator ./rabbitmqctl ...