LINUX应用编程 – 网络编程篇

地址转换函数

1.将字符串的IP地址转换成网络字节序的地址

  • in_addr_t inet_addr(const char *strIP);
  • 若成功,返回32位网络字节序的地址,若出错,则返回INADDR_NONE 不建议使用,因为255.255.255.255这个地址无法被转换
  • int inet_aton(const char *strIP, struct in_addr *addr);
  • 若成功,返回非0,若地址字符串有错,返回0,仅转换IPV4地址
  • int inet_pton(int family, const char *strptr, void *addrptr);
  • 返回:1成功,0-输入不是有效的表达式,-1出错 Family:AF_INET6,AF_INET
  • 2.将网络字节序的地址转换成字符串的IP地址
  • char *inet_ntoa(struct in_addr inaddr);
  • 返回:指向字符串IP的指针。非线程安全,在多线程时避免使用 例:char *ip = inet_ntoa(addr.sin_addr);
  • const char *inet_ntop(int family, const void *addr, char *strIP, size_t len);
  • 参数:family – 地址族,值为AF_INET或AF_INET6 addr – 需要转换的地址 返回:指向字符串IP的指针,失败返回NULL; 例:char ip[64]; inet_ntop(AF_INET, &addr.sin_addr, ip, 64);、
  • 创建套接字
  • 1. socket() int socket(int family, int type, int protocol);
  • 功能描述:创建套接字文件描述字。 参数:family – 协议族(网络层) PF_INET -------- IPV4协议 PF_INET6-------- IPV6协议
  • PF_LOCAL-------- UNIX域协议(PF_LOCAL) PF_ROUTE------- 路由套接口 type – 套接字类型 SOCK_STREAM -------- 字节流套接口(TCP及AC_LOCAL时) SOCK_DGRAM --------- 数据报套接口(UDP及AC_LOCAL时) protocol – 取0 返回:成功为非负描述字,失败返回-1 例子:int fd = socket(PF_INET, SOCK_STREAM, 0);
  • 2. connect()
  • int connect(int sock, const struct sockaddr *addr, socklen_t len);

    功能描述:建立从客户端到服务器的连接 返回:成功返回0,失败返回-1

  • 3 recv() int recv(int sock, void *buf, int size, int flag);
  • 功能描述:从sock套接字接收数据。服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞。也可以使用recv接收面向连接的UDP的报文。
  • 参数 sockfd:套接字描述符 buf:指向内存块的指针 size:内存块大小,以字节为单位 flags:一般为0 返回: >0 接收到的字节个数 -1 接收失败(EAGAIN-套接字非阻塞, EINTR表示被信号中断) 0 对方连接已关闭,说明套接字已经不可用,需要重新建立连接
  • 4 send() ssize_t send(int sock, const void *buf, size_t len, int flags);
  • 功能 在TCP连接上发送数据,返回成功传送数据的长度,出错时返回-1。 send会将外发数据复制到OS内核中,也可以使用send发送面向连接的UDP报文。
  • 参数说明: sock:套接字描述符 data:指向要发送数据的指针 data_len:数据长度 flags:一直为0
  • 5 close() int close(int s); 功能 关闭套接字。
  • 参数说明: s – 要关闭的套接字
  • connect程序

     1 #include <unistd.h>
     2 #include <stdio.h>
     3 #include <sys/socket.h>
     4 #include <netinet/in.h>
     5 #include <arpa/inet.h>
     6 #include <pthread.h>
     7
     8 int main()
     9 {
    10     int sock,size;
    11     uint16_t port = 8000;
    12     const     char *IP = "192.168.7.118";
    13     char buf[1024] = "songlongfei";
    14     struct sockaddr_in addr;
    15     memset(&addr,0,sizeof(addr));
    16     sock = socket(AF_INET,SOCK_STREAM,0);
    17     addr.sin_family = AF_INET;
    18     addr.sin_port = htons(port);
    19     inet_pton(AF_INET,IP,&addr.sin_addr);
    20     if(connect(sock,(struct sockaddr*)&addr,sizeof(addr)) != 0)
    21         printf("Connect failed\n");
    22     while(1)
    23     {
    24         fgets(buf,sizeof(buf),stdin);
    25         if((size = send(sock,buf,sizeof(buf),0)) < 0)
    26             printf("send failed\n");
    27         else
    28             printf("Connect succ!\n");
    29         recv(sock,buf,sizeof(buf),0);
    30         printf("%s\n",buf);
    31     }
    32     close(sock);
    33 }
时间: 2024-11-02 13:54:50

LINUX应用编程 – 网络编程篇的相关文章

7)Linux程序设计入门--网络编程

8)Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个人处 于不败之地,学习Linux的网络编程,可以让我们真正的体会到网络的魅力. 想成为一 位真正的hacker,必须掌握网络编程技术. 现在书店里面已经有了许多关于Linux网络编程方面的书籍,网络上也有了许多关于 网络编程方面的教材,大家都可以 去看一看的.在这里我会和大家一起来领会Linux网

Linux网络编程------网络编程基础

Socket(套接字),类似文件描述符,三种 1.流式套接字(SOCK_STREAM):可以提供可靠的.面向连接的通讯流,它使用TCP协议.TCP保证了数据传输的正确性和顺序性. 2.数据报套接字(SOCK_DGRAM):定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议(UDP). 3.原始套接字(SOCK_RAW):直接基于IP协议. 网络地址 struct sockaddr用于记录网络地址: struct sockaddr { u_s

Linux下TCP网络编程与基于Windows下C#socket编程间通信

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clos

Linux下TCP网络编程与基于Windows下C#socket编程之间通信

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入 数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clo

linux初学者-CIFS网络文件系统篇

linux初学者-CIFS网络文件系统篇 CIFS是一种通用网络文件系统,主要用于网络设备之间的文件共享.CIFS可以在linux系统和windows系统之间共享文件,因此这种文件系统主要用于客户端是windows系统. 提供CIFS的服务是SAMBA,下文将介绍SAMBA服务的一些配置以及用法. 1.SAMBA的安装和配置 "yum install samba samba-common samba-client -y".安装SAMBA服务. "systemctl start

Linux C高级编程——网络编程基础(1)

Linux高级编程--BSD socket的网络编程 宗旨:技术的学习是有限的,分享的精神是无限的. 一网络通信基础 TCP/IP协议簇基础:之所以称TCP/IP是一个协议簇,是由于TCP/IP包括TCP .IP.UDP.ICMP等多种协议.下图是OSI模型与TCP/IP模型的对照.TCP/IP将网络划分为4层模型:应用层.传输层.网络层和网络接口层(有些书籍将其分为5层,即网络接口层由链路层和物理层组成) (1)网络接口层:模型的基层.负责数据帧的发送已接收(帧是独立的网络信息传输单元).网络

Linux环境下网络编程杂谈&lt;&lt;转&gt;&gt;

今天我们说说“Pre-网络编程”.内容比较杂,但都是在做网络应用程序开发过程中经常要遇到的问题. 一.大端.小端和网络字节序 小端字节序:little-endian,将低字节存放在内存的起始地址: 大端字节序:big-endian,将高字节存放在内存的其实地址. 例如,数字index=0x11223344,在大小端字节序方式下其存储形式为: 上图一目了然的可以看出大小端字节序的区别. 还有另外一个概念就是网络字节序.网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型.操作

Linux C高级编程——网络编程之以太网(2)

Linux网络编程--以太网 宗旨:技术的学习是有限的,分享的精神是无限的. 1.以太网帧格式 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的.用ifconfig命令查看," 硬件地址 00:0c:29:cf:7e:1a " .协议字段有三种值,分别相应IP. ARP. RARP.帧末尾是CRC校验码. ARP和RARP数据包的长度不够46字节.要在后面补填充位. 最大值1500称为以太网的最大传输单元( MTU),不同的网络类型有不同的MTU

linux网络编程--网络编程的基本函数介绍与使用【转】

本文转载自:http://blog.csdn.net/yusiguyuan/article/details/17538499 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信? 2.Socke

Linux C高级编程——网络编程(3)

Linux网络编程(三)--TCP 宗旨:技术的学习是有限的,分享的精神是无限的. 1.TCP段格式 和UDP协议一样也有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认序号.窗口大小.4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头最长可以是4x15=60字节,如果没有选项字段, TCP协议头最短20字节.URG. ACK. PSH. RST. SYN. FIN是六个控制位,本节稍后将解释SYN. ACK. FIN. RST四