#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. 清除windows激活信息

    1.管理员运行命令提示符 在命令提示符中输入 slmgr /upk---删除当前KMS密匙 出现"成功地卸载了产品密匙"后,继续依次执行下面两个命令 slmgr /ckms---此 ...

  2. DRF项目之通过业务逻辑选择数据集和序列化器

    在REST后台开发中,我们需要通过业务逻辑来选择数据集或者序列化器. 选择数据集: # 重写get_queryset实现通过业务逻辑选择指定数据集 def get_queryset(self): '' ...

  3. 《Python爬虫技术:深入理解原理、技术与开发》已经出版,送Python基础视频课程

    好消息,<Python爬虫技术:深入理解原理.技术与开发>已经出版!!!   JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送Python基础视频课程!J ...

  4. Django--评论功能实现和用户登录

    1.确定实现评论功能的方式 1.第三方社会化评论插件(有言.多说.网易云跟帖等) 优点:可以直接用,紧急时开发快 缺点:评论存储在第三方,第三方挂了就不弄用 2.Django评论库 django-co ...

  5. js 加密解密 TripleDES

    <!DOCTYPE html> <html lang="en">   <head>     <meta charset="UTF ...

  6. H5页面跳到安卓APP和iosAPP

    if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { // window.webkit.messagehandlers是js的固定写法, ...

  7. Spark-大数据计算引擎

    Spark简介: Spark是一个快速且通用的集群计算平台,可以处理大数据量时候,比如几T到几P量级时候只需要几秒钟到几分钟,相对于hadoop几分钟到几小时速度是很快的,通用是指Spark的使用场景 ...

  8. Linux系统学习笔记

    6.启动python cd /root/yq/v4_1_6309a_btc_nw_cq nohup python3 -u v4_1_6309a_btc_nw_cq.py >> 6309a_ ...

  9. Maven:Unable to import maven project: See logs for details

    一.开发环境 idea2019.1 + apache-maven-3.6.2 + JDK 1.8.0_111 二.问题说明 导入maven 多模块工程之后,发现工程没有多模块的展开,而且也没有在 Ex ...

  10. Hibernate--(二)增删改查

    1.增删改查: public class Test { public static void main(String[] args) { SessionFactory sf = new Configu ...