socket API

1. 字节序

网络协议使用‘大端字节序’(起始地址存的高序字节)来传送这些多字节整数。

#include <netinet/in.h>

uint16_t htons(uint16_t host16bitvalue);

uint32_t htonl(uint32_t host32bitvalue);

uint16_t ntohs(uint16_t net16bitvalue);

uint32_t ntohl(uint32_t net32bitvalue);

2. 点分十进制的ASCII码字符串和32位的网络字节序二进制值间转换IPv4地址

[//下面两个函数淘汰,写出来帮忙过渡记忆

#include <arpa/inet.h>

//字符串符串有效则返回1,否则0

// 不足:出错时addrptr返回 INADDR_NONE(32位1),又有手册称返回-1

int inet_aton(const char *strptr, struct in_addr *addrptr);

char* inet_ntoa(struct in_addr inaddr); // 不足:不可重入

]

// 优点:ipv4和ipv6都适合

// p:presentation n:numeric

#include <arpa/inet.h>

// 注意:成功返回1,输入格式无效返回0,出错返回-1;EAFNOSUPPORT

int inet_pton(int family, const char *strptr, void *addrptr);

// 成功返回指向结果的指针,出错返回NULL; ENOSPC

const char* inet_ntop(int family, const void *addrptr, char *strptr, size_t len);

3. socket

#include <sys/socket.h>

int socket(int family, int type, int protocol);

int connect(int sockfd, const struct sockaddr* servaddr, socklen_t addrlen);

//bind可以指定IP地址或端口,或两者都指定,或两者都不指定。

//bind系统保留端口,需要root权限

int bind(int sockfd, const struct sockaddr* myaddr, socklen_t addrlen);

//返回套接字关联的本地协议地址

int getsockname(int sockfd, struct sockaddr* localaddr, socklen_t *addrlen);

//返回套接字关联的远程协议地址 如accept返回的客户sockfd的对应地址

int getpeername(itn sockfd, struct sockaddr* peeraddr, socklen_t addrlen);

int listen(int sockfd, int backlog);// 还是不明白backlog指定为什么样的值比较好?

监听套接字维护两个队列:未完成连接队列(SYN_RCVD)和已完成连接队列(ESTABLISHED)。

int accept(int listenfd, struct sockaddr* cliaddr, socklen_t *addrlen);

4. 建立连接后

#include <unistd.h>

int close(int sockfd);

/*

fork调用一次,返回两次:调用进程返回子进程ID号,子进程返回0

fork的两个用法:一是进程创建自身的一个副本;二是一个进程想要执行另一个程序,副本调用 exec把自身替换成新的程序。

*/

pid_t fork(void);

pid_t getppid(void);//获得父进程ID

时间: 2024-08-11 09:57:20

socket API的相关文章

LwIP - raw/callback API、协议栈API(sequential API)、BSD API(或者说 SOCKET API)

1.使用raw/callback API编程,用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式. recv_udp, accept_function, sent_tcp, recv_tcp, do_connected, poll_tcp, err_tcp! 2.协议栈API(sequential API)是基于raw/callback API实现的,它与内核交换的方式也只能通过回调. netconn_new, netconn_delete, netconn_ge

Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <纲要> Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理 UDP服务器 客户端最小模型,处理字符转大写 TCP 多进程并发服务器模型,为每个客户端开启一个进程: TCP 多线程服务器模型,使用wrap函数封装 作业: ---------------------------------------------------- UDP服务器 客户端最小模型,处理字符转大写 [em

TCP协议和socket API 学习笔记

本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类: 原文地址:TCP协议和socket API 学习笔记 作者:gilbertjuly  • TCP包头 ACK为1时,确认序号有效,表示期望收到的下一个序号,是上次成功收到的字节序加1. SYN, FIN都占用一个序号. • TCP连接的建立 client通过connect()来建立TCP连接,connect()会发送SYN报文: server通过bind().list

tcp 三次握手和四次断连深入分析:连接状态和socket API的关系

说到tcp协议,凡是略微看过的人都能顺口说出三次握手和四次断连.再牛逼的一点的就能够把每一个状态(SYNC_SENT.CLOSE_WAIT. ... ..等)都能背出来, 而说道socket编程.基本上写过网络编程的人都会熟悉那几个标准的API:socket.connect.listen.accept.... ..等 可是.我敢打赌非常少有人明确tcp状态和socket编程API之间的关系.不信? 看看例如以下几个问题你是否知道吧: 1)什么时候客户端才干够连接上server端, 是server

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线

基本socket api

socket函数,为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,并且指定通信协议类型. #include<sys/socket.h> int socket (int family, int type, int protocol); //成功返回非负描述符,出错-1 其中family参数指明了协议族,AF_INET(IPv4), AF_INET6(IPv6):type参数指明套接字的类型,SOCK_STREAM(字节流) , SOCK_DGRAM(数据包). connet

Socket API概述

ACE Socket Wrapper Facade 1:Socket API 1.1 IPC(进程间通信) IPC分为本地IPC(同一计算机上的不同进程)和远程IPC(网络互联的不同计算机),本地IPC的机制有共享内存(shared memory).管道(pipe).信号(signal)等,远程IPC的机制有Socket.X25电路.WIN32命名管道(named pipe). 1.2 Socket API 应用程序可以用Socket API中的C函数创建.管理本地通信端点(endpoint),

Windows Socket API 使用经验

本文是我在进行MS-Windows.HP-Unix网络编程的实践过程中总结出来的一些经验,仅供大家参考.本文所谈到的Socket函数如果没有特别说明,都是指的Windows Socket API. 一.WSAStartup函数    int WSAStartup(      WORD wVersionRequested,        LPWSADATA lpWSAData      );    使用Socket的程序在使用Socket之前必须调用WSAStartup函数.该函数的第一个参数指明

JNI 和 socket api

1.JavaVM 和 JNIEnvJNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线程都可以使用这个JavaVM.当后台线程需要调用JNI native时,在native库中使用全局变量保存JavaVM尤为重要,这样使得后台线程能通过JavaVM获得JNIEnv. // e.gJNIEnv *env = NULL;if(0 == gVm-> AttachCurrentThread(&am

Socket编程实践(18) --Socket API 封装(1)

序言: 定义一套用于TCP通信比较实用/好用Socket类库(运用C++封装的思想,将socket API尽量封装的好用,实用); 思想来源:http://www.cnblogs.com/-Lei/archive/2012/09/04/2670942.html Socket.h #ifndef SOCKET_H_INCLUDED #define SOCKET_H_INCLUDED #include <sys/socket.h> #include <sys/types.h> #inc