#include "unp.h"

 int main(int argc , char**argv)
{
int sockfd , n; //sockfd套接字描述符
char recvline[MAXLINE + ];
struct sockaddr_in servaddr; /*sockaddr_in={
* short sin_family; 地址族
* unsigned short sin_port; 端口号,必须采用网络数据格式,可用htons()函数将数字转换为网络数据格式
* struct in_addr sin_addr; Ip地址
* unsigned char sin_zero[8];
*/ if (argc != )
err_quit("usage: a.out <IPaddress>");
if ((sockfd = socket(AF_INET,SOCK_STREAM,)) < )
err_sys("socket error"); bzero(&servaddr,sizeof(servaddr));//将servaddr置0
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons();//将数字转换为网络数据格式
if (inet_pton(AF_INET,argv[],&servaddr.sin_addr) <= )
err_quit("inet_pton error for %s",argv[]);
if (connect(sockfd,(SA *) &servaddr,sizeof(servaddr)) < )
err_sys("connect error"); while ( (n = read(sockfd,recvline,MAXLINE)) > ){// read函数读取服务器的应答,并使用fputs输出结果
recvline[n] = ;
if ( fputs(recvline,stdout) == EOF)
err_sys("fputs error");
}
if (n < )
err_sys("read error"); exit();
}
  • 第18行socket函数原型为int socket(int af ,int type , int protocal);

    • 用途:根据指定的地址族,数据类型和协议来分配一个套接口的描述字及其所用的资源
  • 第24行的inet_pton函数原型为int inet_pton(int af , const char* src , void *dst);
    • 用途:将字符串转换为网络地址
    • af是地址族,src为来源地址,dst则是接收转换后的数据
  • 第26行的connect函数原型为 int connect(int s, const struct sockaddr * name, int namelen);
    • 用途:建立与指定socket的连接
    • s标识一个未连接的socket,name为指向要连接的套接字的sockaddr结构体的指针,namelen为sockaddr结构体的字节长度

Unix网络编程学习 < 一 >的更多相关文章

  1. UNIX网络编程学习指南--epoll函数

    epoll是select/poll的强化版,都是多路复用的函数,epoll有了很大的改进. epoll的功能 1.支持监听大数目的socket描述符 一个进程内,select能打开的fd是有限制的,有 ...

  2. UNIX网络编程学习笔记:值-结果(value-result)参数

    前言 当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针.结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程. 1.从进 ...

  3. UNIX 网络编程学习

    a.述 书买很久了,好好学习下.O(∩_∩)O  只写程序,原理什么的,先不写了. b.环境 deepin15.4.1 64位 vs code gcc version 6.4.0 20170724 ( ...

  4. UNIX网络编程--学习日记

    今天在学习accept函数的时候,在执行服务器程序的时候,碰到了如下的出错信息: bind error: Address already in use 其原因在于服务器程序使用了13号的端口; 然而在 ...

  5. Unix网络编程学习笔记之第12章 IPv4与IPv6的互操作性

    一. 简单介绍 如果我们本章讨论的主机都是支持双栈的,即支持IPv4地址.也支持Ipv6地址. 我们本次讨论的点:client与server端使用的是不同类型的地址.由于同样类型的地址没什么可讲的. ...

  6. UNIX网络编程学习(9)--getsockname和getpeername的用法及实例(转)

    getsockname和getpeername #include <sys/socket.h>int getsockname(int sockfd, struct sockaddr *lo ...

  7. UNIX网络编程——ICMP报文分析:端口不可达

    ICMP的一个规则是,ICMP差错报文必须包括生成该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该IP首部后面的前8个字节(包含源端口和目的端口).在我们的例子中,跟在IP首部后面的前 ...

  8. 《UNIX网络编程 卷1》之"学习环境搭建"(CentOS 7)

    <UNIX网络编程 卷1>的源码可以从www.unpbook.com下载得到.解压之后的目录为unpv13e. 详细步骤 编译 进入unpv13e目录,按如下步骤编译: ./configu ...

  9. 【Linux/unix网络编程】之使用socket进行TCP编程

    实验一 TCP数据发送与接收 [实验目的] 1.熟练掌握套接字函数的使用方法. 2.应用套接字函数完成基本TCP通讯,实现服务器与客户端的信息交互. [实验学时] 4学时 [实验内容] 实现一个服务器 ...

随机推荐

  1. Vue2.x双向数据绑定

    1.vue双向绑定原理 vue.js 则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给 ...

  2. DevOps - 为什么

    章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...

  3. springcloud微服务架构搭建入门笔记

    注册管理服务器 应用入口配置 @SpringBootApplication @EnableEurekaServer public class GatewayApplication { public s ...

  4. Linux学习总结《shell脚本》知识点关键-用好“过滤器”

  5. 如何用naviecat批量创建mysql数据

    1.参考博文:https://blog.csdn.net/lelly52800/article/details/87267096 2.excel要与表结构一致 3.右键,导入向导,选择相应版本,点击“ ...

  6. C++学习记录——(queue的清空)

    c++自带的queue并没有clear这个方法:所以只能自己写了. 一共三种(其实我决得就是两种): 第一种: 直接赋值 queue<int> MyQue; /* …… */ MyQue ...

  7. linux下anaconda的安装和使用

    1.将python3设置为默认 直接执行这两个命令即可: sudo update-alternatives --install /usr/bin/python python /usr/bin/pyth ...

  8. htmp to pdf

    C++ Library to Convert HTML to PDF html2pdf PrinceXML 收费 CutePDF Ghostscript PDFDoc VisPDF PDFDoc Sc ...

  9. TextBoxFor()扩展方法

    1.扩展方法 public static class TextBoxForHelper { public static MvcHtmlString CreateTextBoxFor<TModel ...

  10. postman带上token对接口进行测试

    根据验证码进行登陆,登录之后返回token.然后请求其他接口时在header头中带上token访问其他接口进行测试 账户信息输入验证码 登陆成功,看到返回的token 我们这个项目可以刷新一下toke ...