免费版 C socket 指南

合集下载

Qing_C-S通讯Socket的详细做法

Qing_C-S通讯Socket的详细做法

Qing_C-S通讯Socket的详细做法背景:我们用Scoket实现客户端和服务端的通信。

要求如下:1、一个服务端可以监听多个客户端2、客户端和服务端之间可以对话3、服务端群发消息至客户端4、服务端停止监听,客户端会显示断开连接5、客户端断开连接,服务端会显示该客户端断开将来可能的题目要求,即待实现:6、客户端和客户端的通话(应通过服务端连接,不允许客户端彼此之间互相连接)7、客户端和客户端的断开以及登陆的即时显示8、如果客户端和客户端是局域网,那么可以考虑是否让他们直接连接9、做成QQ的形式。

改善布局。

以及界面10、其它工具:VS2010旗舰版语言:C#现在的布局如下:现在开始说明如何实现这整体的布局:服务端:1、SendMessage和ReceivedMessage是使用richTextBox,也就是富文本编辑器。

2、服务端的停止监听,在刚打开From的时候是开始监听,点击开始监听会变成停止监听,实现如下:3、连接Socket的方法:先写好端口:然后开始监听:4、接收到得消息如何进行处理?是登陆消息?还是退出消息?还是对话消息?我们该怎么去区分他呢?答案就是,在客户端传来的字段中,加入标志段:比如“talk,你好啊”,就是说话比如“login,”就是登陆进来比如“logout,”就是登出所以,我们在接收到的字段需要处理,根据“,”分开,得到标识符和消息。

主要是因为编码问题等。

其实可以不经过这个方法。

处理的方法如下:然后接收消息的语句如下:无论是登陆等处还是其他。

都需要对消息进行写入写入包括两点:一是吧消息写入消息列表,二是把用户写入用户列表,也就是客户端列表。

这里我通过两个方法:AddItem()方法是把某些消息写入富文本编辑器中:如图:refresh()方法是刷新用户表。

从当前存储的用户列表中读取,比较简单:所以,为了满足MVC思想,也就是页面层和数据分开。

我们改页面只是根据数据改。

就是说我们不直接对页面操作,我们是每次读取数据。

socket编程c语言

socket编程c语言

socket编程c语言
摘要:
1.引言
2.socket 编程简介
3.socket 编程的基本概念
4.使用C 语言进行socket 编程
5.创建socket
6.连接socket
7.发送和接收数据
8.关闭socket
9.总结
正文:
Socket 编程是一种网络编程技术,它允许程序在不同的计算机之间进行通信。

C 语言是一种广泛使用的编程语言,也可以用于socket 编程。

Socket 编程的基本概念包括:套接字、协议、地址等。

套接字是一种数据结构,用于表示网络连接。

协议是网络通信的规则,例如TCP/IP 协议。

地址用于唯一标识网络上的计算机。

使用C 语言进行socket 编程需要使用一些库函数,例如socket、bind、listen、accept、connect、send、recv 等。

创建socket 需要调用socket 函数,该函数需要两个参数:套接字类型和协议类型。

套接字类型包括SOCK_STREAM、SOCK_DGRAM 等,协议类
型包括IPPROTO_TCP、IPPROTO_UDP 等。

连接socket 需要调用connect 函数,该函数需要三个参数:套接字、服务器地址和连接超时时间。

发送和接收数据需要调用send 和recv 函数,这两个函数需要两个参数:套接字和数据缓冲区。

关闭socket 需要调用close 函数,该函数需要一个参数:套接字。

总结起来,socket 编程是一种重要的网络编程技术,C 语言也可以用于socket 编程。

cc++socket函数详解

cc++socket函数详解

cc++socket函数详解c/c++ socket函数详解注意: 使⽤socketAPI前,要先将相关链接库(Ws2_32.lib)加⼊链接,并使⽤WSAStartUp函数初始化。

在linux中地址结构体sockaddr的结构与windows的不太⼀样,具体请百度每个socket函数都可能失败(返回-1),需要判断结果socket分成两种:⼀种专门⽤来监听新链接(或新活动),这种socket叫做master socket,⼀般只存在于服务器⼀种专门⽤来收发数据,这种socket叫做connected socket,客户端和服务器都存在int socket(int af,int type,int protocol);// 建⽴⼀个socket⽤于连接af:address family,如AF_INETtype:连接类型,通常是SOCK_STREAM或SOCK_DGRAMprotocol:协议类型,通常是IPPROTO_TCP或IPPROTO_UDP// 返回值:socket的编号,为-1表⽰失败int bind(int socket,sockaddr * address,uint addrlen);// 将⼀个地址和⼀个端⼝号绑定到⼀个socket连接上// socket:之前创建的socket// sockaddr:⼀个⽤来存放Ip地址和端⼝号的结构体// addrlen:上述结构体的长度// 返回值:为-1表⽰失败,若端⼝被占⽤,会从新绑定⼀个随机端⼝(仍返回失败)// 地址绑定为0表⽰绑定本机所有IPint sendto(int socket,char * buf,uint buflen,int flag,sockaddr * address,uint addrlen);【仅UDP】// 向⼀个指定的地址发送缓冲区内指定长度的消息// socket:之前创建的socket// buf:要发送的缓冲区// buflen:要发送的长度// flag:⼀般为0// sockaddr:⽬标地址// addrlen:上述结构体的长度// 返回值:发送出去的长度int recvfrom(int socket,char * buf,uint buflen,int flag,sockaddr * fromaddr,int * addrlen);【阻塞】【仅UDP】// 接收消息,可以获取发送⽅的地址// fromaddr:发送⽅地址(输出参数)// addrlen:发送⽅地址结构体的长度(输⼊输出参数)// 返回值:>0表⽰收到的字节数,=0表⽰连接被关闭,-1表⽰出错int recv(int socket,char * buf,uint buflen,int flag);【阻塞】// UDP时:接收任何⼀个发送到该socket的消息(⽆法获取发送⽅地址)// TCP时:接收⼀个已连接的socket (connected socket)发送的信息// socket:UDP时,为之前创建的socket,TCP时,为connected socket// buf:接收的缓冲区// buflen:缓冲区的长度// flag:⼀般为0// 返回值:>0表⽰收到的字节数,=0表⽰连接被关闭,-1表⽰出错// 注意:对于TCP,请确保socket是已连接的,因为只有已连接的socket会阻塞此函数// 该函数实际上是从缓冲区取指定长度的数据,如果缓冲区没有数据,则会阻塞;如果没有取完,则下次使⽤此函数的时候不会阻塞// 应注意:当⼀次⽆法获得对⽅发送的全部数据,在数据不完整的时候,程序可能⽆法向下执⾏,可以考虑将数据放在缓冲区中,等数据全部接收完成的时候再使⽤int getsockname(int socket,sockaddr * address,int * addrlen);// 获取指定socket上绑定的IP、端⼝信息(不能获取connected socket上的地址信息)// address:socket上绑定的地址(输出参数)// addrlen:socket上绑定的地址结构体的长度(输⼊输出参数)int getpeername(int socket,,sockaddr * address,int * addrlen);【仅TCP】// 获取⼀个已连接的socket的地址、端⼝信息// 参数含义同上struct sockaddr_in⼀个⽤来指定IP地址和端⼝号的结构体(不太好⽤,建议将其封装) family // 即address family,如AF_INET port // 端⼝号(注意要按位倒序,使⽤htons函数) sin_addr.S_un.S_addr // ⼀个为long类型的ip地址该结构体所有成员的字序为⽹络字序,低字节在前,⾼字节在后int listen(int socket,int maxconn);【仅TCP】【服务器】// 将⼀个socket设置为监听状态,专门⽤来监听的socket叫做master socket// maxconn:最⼤接收连接数// 返回值:失败返回-1,成功返回0int accept(int socket,sockaddr * fromaddr,int * addrlen);【阻塞】【仅TCP】【服务器】// 接收⼀个客户机的连接,返回⼀个socket,来⾃客户机的socket叫connected socket// socket:⽤来监听的socket(master socket)// fromaddr:客户机的地址信息// addrlen:地址结构体的长度(输⼊输出参数)// 返回值:返回⼀个新的socket,这个socket专门⽤来与此客户机通讯(connected socket)int connect(int socket,sockaddr * addr,int addrlen);【仅TCP】【客户端】// 使⽤当前socket连接⼀个地址(与服务器建⽴正式连接),此函数会触发服务器端的accept、select函数// 注意:服务端接收的socket值和客户端socket值不⼀样// addr:⼀般是服务器地址int send(int socket,char * buf,char buflen,int flag);【仅TCP】// 向⼀个已连接的socket发送信息,这个socket应该是connected socket(⾮master socket)int closesocket(int socket);// 关闭⼀个已存在的socket【正常关闭】// 失败返回-1,成功返回0UDP通讯流程WSAStartup()socket()bind()sendto(connected socket)/recv()/recvfrom()TCP通讯流程(服务器):WSAStartup()socket()bind()listen()accept()send()/recv()TCP通讯流程(客户端):WSAStartup()socket()bind()connect()send()/recv()。

c socket ioctl使用方法

c socket ioctl使用方法

C socket ioctl使用方法一、什么是ioctlioctl是一个用于控制设备的系统调用,它可以向设备发出特定的控制命令,从而对设备进行配置、控制和查询。

在C语言中,我们可以使用ioctl函数来调用ioctl系统调用。

二、C socket在网络编程中,C语言中的socket库提供了对网络通信的支持,可以使用socket库来创建、连接、发送和接收网络数据。

而在进行网络编程的过程中,有时候我们会需要通过ioctl来控制和配置网络套接字的一些参数。

三、使用ioctl对socket进行控制在C语言中,我们可以使用ioctl函数来对socket进行控制。

具体的使用步骤如下:1. 包含相关头文件在使用ioctl函数之前,我们需要包含相关的头文件,以便能够调用ioctl函数和使用所需的常量定义。

常用的头文件包括<sys/ioctl.h>和<sys/socket.h>。

2. 创建socket我们需要通过socket函数来创建一个套接字。

套接字可以是流套接字(SOCK_STREAM)或者数据报套接字(SOCK_DGRAM),具体的类型由实际需求决定。

3. 设置套接字参数在创建套接字之后,我们可以使用setsockopt函数来设置套接字的一些参数,如超时时间、重传次数等。

当然,也可以通过ioctl函数来设置一些更底层的套接字参数。

4. 调用ioctl函数接下来,我们就可以调用ioctl函数来对套接字进行控制。

ioctl函数的原型通常为:```cint ioctl(int fd, unsigned long request, ...);```其中,fd为套接字描述符,request为控制命令,后面的参数视具体的控制命令而定。

通过合理的request值和参数,我们可以控制套接字的多种参数,如发送缓冲区大小、接收超时时间等。

5. 错误处理在调用ioctl函数之后,我们需要根据返回值来进行错误处理。

socket编程入门(经典版)

socket编程入门(经典版)

(struct sockaddr *)&cliaddr, &cliaddr_len); n = read(connfd, buf, MAXLINE); printf("received from %s at PORT %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)), ntohs(cliaddr.sin_port)); for (i = 0; i < n; i++) buf[i] = toupper(buf[i]); write(connfd, buf, n); close(connfd); } }
2.1. 最简单的TCP网络程序 请点评
下面通过最简单的客户端/服务器程序的实例来学习socket API。 server.c的作用是从客户端读字符,然后将每个字符转换为大写并回送给客户端。
/* server.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #define MAXLINE 80 #define SERV_PORT 8000 int main(void) { struct sockaddr_in servaddr, cliaddr; socklen_t cliaddr_len; int listenfd, connfd; char buf[MAXLINE]; char str[INET_ADDRSTRLEN]; int i, n; listenfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(SERV_PORT); bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); listen(listenfd, 20); printf("Accepting connections ...\n"); while (1) { cliaddr_len = sizeof(cliaddr); connfd = accept(listenfd,

c语言Socket编程

c语言Socket编程

网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。

Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

什么是SocketSocket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。

要学Internet上的TCP/IP网络编程,必须理解Socket接口。

Socket接口设计者最先是将接口放在Unix操作系统里面的。

如果了解Unix系统的输入和输出的话,就很容易了解Socket了。

网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。

Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。

流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。

socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型: SOCK_STREAM 或SOCK_DGRAM,Socket 接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值 "0"。

c 标准库 socket

c 标准库 socket

c 标准库 socketC 标准库中的socket。

在C语言中,socket是一个非常重要的概念,它提供了一种通信机制,使得不同的程序能够在网络上进行数据交换。

在C标准库中,我们可以通过使用socket 来实现网络编程,实现客户端和服务器之间的通信。

本文将介绍C标准库中socket 的基本概念、使用方法以及一些常见问题的解决方案。

首先,我们需要了解什么是socket。

Socket是一种通信机制,它允许不同的程序在网络上进行数据交换。

在C标准库中,我们可以通过包含<sys/socket.h>头文件来使用socket相关的函数和数据结构。

使用socket编程时,我们需要创建一个socket对象,并通过bind、listen、accept等函数来建立和管理网络连接。

接下来,我们来看一下如何在C标准库中使用socket。

首先,我们需要创建一个socket对象,可以通过调用socket函数来实现。

该函数接受三个参数,分别是地址族、套接字类型和协议。

例如,我们可以通过调用socket(AF_INET,SOCK_STREAM, 0)来创建一个基于IPv4协议的流式套接字。

接着,我们可以通过调用bind函数来绑定套接字到一个特定的地址和端口。

然后,我们可以通过调用listen函数来监听连接请求,并通过accept函数来接受客户端的连接。

最后,我们可以通过read和write函数来进行数据的读写操作。

在实际的网络编程中,我们可能会遇到一些常见的问题,比如如何处理并发连接、如何处理网络错误等。

针对这些问题,我们可以通过使用多线程或多进程来处理并发连接,可以通过设置超时时间来处理网络错误。

另外,我们还可以通过使用非阻塞IO来提高程序的性能,通过使用select函数来实现多路复用等技术来优化网络编程的性能和稳定性。

总结一下,C标准库中的socket提供了一种通信机制,使得不同的程序能够在网络上进行数据交换。

SOCKET编程(C语言实现)

SOCKET编程(C语言实现)

SOCKET编程(C语言实现)
一、简介
SOCKET编程可以理解为IP地址和端口的组合,它是一种网络编程的
基础,可以用来实现不同计算机之间的计算机程序通信。

它有两种特点:1.使用TCP/IP协议进行连接;2.能够支持多用户客户端/服务器编程。

使用SOCKET编程实现的网络通信,其基本流程是:客户端向服务器
发起连接,服务器接受客户端的连接请求并响应,双方建立连接后,客户
端发送数据,服务器接受客户端的数据并做出响应,最后双方断开连接。

二、开发环境
SOCKET编程是用C语言编写的,所以需要使用C语言编译器进行编译。

常用的C语言开发环境有:Visual Studio、Xcode、Eclipse等。

Xcode和Eclipse比较适合用来开发Mac版本的SOCKET程序,但Windows
版本的SOCKET程序需要使用Visual Studio开发。

使用Visual Studio开发SOCKET编程,需要引入WinSock2.h和
WS2_32.dll库,打开工程属性->调试->编译器->预处理器->预处理器定义,增加 WIN32 和 _WINSOCK_DEPRECATED_NO_WARNINGS变量,这样就可
以在工程中应用Winsock2.h库了。

三、编程实现
1. 创建Socket
在SOCKET编程中,每台主机都必须有一个唯一的IP地址,然后客户
端和服务器之间必须建立连接。

创建Socket时,需要调用socket(函数,函数头如下:
// 创建socket。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

不差的入门文档,由于之前的都收费的,所以搞个免费的。

--------------------------------------------------------------------------------介绍Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等…好在我已经将这些事完成了,我将和所有人共享我的知识了。

如果你了解 C 语言并想穿过网络编程的沼泽,那么你来对地方了。

--------------------------------------------------------------------------------读者对象这个文档是一个指南,而不是参考书。

如果你刚开始 socket 编程并想找一本入门书,那么你是我的读者。

但这不是一本完全的 socket 编程书。

--------------------------------------------------------------------------------平台和编译器这篇文档中的大多数代码都在 Linux 平台PC 上用 GNU 的 gcc 成功编译过。

而且它们在 HPUX平台上用 gcc 也成功编译过。

但是注意,并不是每个代码片段都独立测试过。

--------------------------------------------------------------------------------目录:1) 什么是套接字?2) Internet 套接字的两种类型3) 网络理论4) 结构体5) 本机转换6) IP 地址和如何处理它们7) socket()函数8) bind()函数9) connect()函数10) listen()函数11) accept()函数12) send()和recv()函数13) sendto()和recvfrom()函数14) close()和shutdown()函数15) getpeername()函数16) gethostname()函数17) 域名服务(DNS)18) 客户-服务器背景知识19) 简单的服务器20) 简单的客户端21) 数据报套接字Socket22) 阻塞23) select()--多路同步I/O24) 参考资料--------------------------------------------------------------------------------什么是 socket?你经常听到人们谈论着“socket”,或许你还不知道它的确切含义。

现在让我告诉你:它是使用标准Unix 文件描述符 (file descriptor) 和其它程序通讯的方式。

什么?你也许听到一些Unix高手(hacker)这样说过:“呀,Unix中的一切就是文件!”那个家伙也许正在说到一个事实:Unix 程序在执行任何形式的 I/O 的时候,程序是在读或者写一个文件描述符。

一个文件描述符只是一个和打开的文件相关联的整数。

但是(注意后面的话),这个文件可能是一个网络连接,FIFO,管道,终端,磁盘上的文件或者什么其它的东西。

Unix 中所有的东西就是文件!所以,你想和Internet上别的程序通讯的时候,你将要使用到文件描述符。

你必须理解刚才的话。

现在你脑海中或许冒出这样的念头:“那么我从哪里得到网络通讯的文件描述符呢?”,这个问题无论如何我都要回答:你利用系统调用 socket(),它返回套接字描述符 (socket descriptor),然后你再通过它来进行send() 和 recv()调用。

“但是...”,你可能有很大的疑惑,“如果它是个文件描述符,那么为什么不用一般调用read()和write()来进行套接字通讯?”简单的答案是:“你可以使用!”。

详细的答案是:“你可以,但是使用send()和recv()让你更好的控制数据传输。

”存在这样一个情况:在我们的世界上,有很多种套接字。

有DARPA Internet 地址 (Internet 套接字),本地节点的路径名 (Unix套接字),CCITT X.25地址 (你可以将X.25 套接字完全忽略)。

也许在你的Unix 机器上还有其它的。

我们在这里只讲第一种:Internet 套接字。

--------------------------------------------------------------------------------Internet 套接字的两种类型什么意思?有两种类型的Internet 套接字?是的。

不,我在撒谎。

其实还有很多,但是我可不想吓着你。

我们这里只讲两种。

除了这些, 我打算另外介绍的 "Raw Sockets" 也是非常强大的,很值得查阅。

那么这两种类型是什么呢?一种是"Stream Sockets"(流格式),另外一种是"Datagram Sockets"(数据包格式)。

我们以后谈到它们的时候也会用到 "SOCK_STREAM" 和 "SOCK_DGRAM"。

数据报套接字有时也叫“无连接套接字”(如果你确实要连接的时候可以用connect()。

) 流式套接字是可靠的双向通讯的数据流。

如果你向套接字按顺序输出“1,2”,那么它们将按顺序“1,2”到达另一边。

它们是无错误的传递的,有自己的错误控制,在此不讨论。

有什么在使用流式套接字?你可能听说过 telnet,不是吗?它就使用流式套接字。

你需要你所输入的字符按顺序到达,不是吗?同样,WWW浏览器使用的 HTTP 协议也使用它们来下载页面。

实际上,当你通过端口80 telnet 到一个 WWW 站点,然后输入“GET pagename”的时候,你也可以得到 HTML 的内容。

为什么流式套接字可以达到高质量的数据传输?这是因为它使用了“传输控制协议 (The Transmission Control Protocol)”,也叫“TCP” (请参考 RFC-793 获得详细资料。

)TCP 控制你的数据按顺序到达并且没有错误。

你也许听到“TCP”是因为听到过“TCP/IP”。

这里的 IP 是指“Internet协议”(请参考 RFC-791。

) IP 只是处理 Internet 路由而已。

那么数据报套接字呢?为什么它叫无连接呢?为什么它是不可靠的呢?有这样的一些事实:如果你发送一个数据报,它可能会到达,它可能次序颠倒了。

如果它到达,那么在这个包的内部是无错误的。

数据报也使用 IP 作路由,但是它不使用 TCP。

它使用“用户数据报协议 (User Datagram Protocol)”,也叫“UDP” (请参考 RFC-768。

)为什么它们是无连接的呢?主要是因为它并不象流式套接字那样维持一个连接。

你只要建立一个包,构造一个有目标信息的IP 头,然后发出去。

无需连接。

它们通常使用于传输包-包信息。

简单的应用程序有:tftp, bootp等等。

你也许会想:“假如数据丢失了这些程序如何正常工作?”我的朋友,每个程序在 UDP 上有自己的协议。

例如,tftp 协议每发出的一个被接受到包,收到者必须发回一个包来说“我收到了!” (一个“命令正确应答”也叫“ACK”包)。

如果在一定时间内(例如5秒),发送方没有收到应答,它将重新发送,直到得到 ACK。

这一ACK过程在实现 SOCK_DGRAM 应用程序的时候非常重要。

--------------------------------------------------------------------------------网络理论既然我刚才提到了协议层,那么现在是讨论网络究竟如何工作和一些关于 SOCK_DGRAM 包是如何建立的例子。

当然,你也可以跳过这一段,如果你认为已经熟悉的话。

现在是学习数据封装 (Data Encapsulation) 的时候了!它非常非常重要。

它重要性重要到你在网络课程学(图1:数据封装)习中无论如何也得也得掌握它。

主要的内容是:一个包,先是被第一个协议(在这里是TFTP )在它的报头(也许是报尾)包装(“封装”),然后,整个数据(包括 TFTP 头)被另外一个协议 (在这里是 UDP )封装,然后下一个( IP ),一直重复下去,直到硬件(物理) 层( 这里是以太网 )。

当另外一台机器接收到包,硬件先剥去以太网头,内核剥去IP和UDP 头,TFTP程序再剥去TFTP头,最后得到数据。

现在我们终于讲到声名狼藉的网络分层模型 (Layered Network Model)。

这种网络模型在描述网络系统上相对其它模型有很多优点。

例如,你可以写一个套接字程序而不用关心数据的物理传输(串行口,以太网,连接单元接口 (AUI) 还是其它介质),因为底层的程序会为你处理它们。

实际的网络硬件和拓扑对于程序员来说是透明的。

不说其它废话了,我现在列出整个层次模型。

如果你要参加网络考试,可一定要记住:应用层 (Application)表示层 (Presentation)会话层 (Session)传输层(Transport)网络层(Network)数据链路层(Data Link)物理层(Physical)物理层是硬件(串口,以太网等等)。

应用层是和硬件层相隔最远的--它是用户和网络交互的地方。

这个模型如此通用,如果你想,你可以把它作为修车指南。

把它对应到 Unix,结果是:应用层(Application Layer) (telnet, ftp,等等)传输层(Host-to-Host Transport Layer) (TCP, UDP)Internet层(Internet Layer) (IP和路由)网络访问层 (Network Access Layer) (网络层,数据链路层和物理层)现在,你可能看到这些层次如何协调来封装原始的数据了。

看看建立一个简单的数据包有多少工作?哎呀,你将不得不使用 "cat" 来建立数据包头!这仅仅是个玩笑。

对于流式套接字你要作的是 send() 发送数据。

对于数据报式套接字,你按照你选择的方式封装数据然后使用 sendto()。

内核将为你建立传输层和 Internet 层,硬件完成网络访问层。

这就是现代科技。

现在结束我们的网络理论速成班。

哦,忘记告诉你关于路由的事情了。

但是我不准备谈它,如果你真的关心,那么参考 IP RFC。

--------------------------------------------------------------------------------结构体终于谈到编程了。

相关文档
最新文档