unix network programming

一、发现网络拓扑的常用方法

1、netstat  -n 输出数值地址,而不需要将其反向解析为名字

                   -i  输出所有的网络接口信息

                -r  输出路由信息,和route的输出一致

2、ifconfig

  输出信息中的MULTICAST标志指明该接口所在主机是否支持多播

-a  输出所有已配置接口的信息

3、找出本地主机中众多ip地址的一个方法是:ping本地接口的广播地址

ping -b 广播地址

二、BSD支持网络的历史

openbsd  netbsd  freebsd

http://zh.wikipedia.org/zh-cn/BSD#4.4BSD.E5.8F.8A.E5.85.B6.E5.90.8E.E8.A3.94

三、OSI模型(计算机通信开放系统互连   open system interconnection)

OSI的七层模型为:应用层、表示层、会话层(应用层)、传输层(TCP UDP)、网络层(IPv4  IPv6)、      数据链路层、物理层(设备驱动程序和网络硬件)

需要注意是的是:1500字节以太网的MTU大小

在网络中透过TCP和UDP直接和网络层进行交互是可行的,这是原始套接字(raw socket)

还可以应用层直接和数据链路层的数据帧进行交互

应用层是由用户进程,下面的三层(传输层、网络层、数据链路层)使用内核的机制来进行提供的。

四、书中的两个主要的例子

(1)、时间获取的客户端和服务器端的例子

(2)、回射客户端和服务器的程序的例子

五、获取时间的服务器的程序

(1)、使用安全的函数      snprintf(在字符串结尾处加上一个回车符合换行符)   strncat  strncpy   fgets

(2)、迭代服务器  并发服务器

同时处理多个客户端的并发请求的方法有:

1)、为每个客户创建一个子进程(fork)

2)、为每个客户创建一个子线程

3)、在服务器启动的时候预先fork一定数量的子进程

(3)、unix的守护进程

(4)、其他

time()获取unix纪元以来的秒数  ctime则将返回的秒数转换为直观可读的时间形式

时间: 2024-11-17 03:14:15

unix network programming的相关文章

Network Programming Using Libevent - (I)

在課堂上學過 Unix Network Programming 後,我們知道在處理多 User 時會有幾種方法解決: 一個新的 Connection 進來,用 fork() 產生一個 Process 處理. 一個新的 Connection 進來,用 pthread_create() 產生一個 Thread 處理. 一個新的 Connection 進來,丟入 Event-based Array,由 Main Process 以 Nonblocking 的方式處理所有的 I/O. 這三種方法當然也都

Java Network Programming 笔记(1)

笔记   Java Network Programming 笔记 n5 一 网络基本概念Chapter2 Basic Network Concepts 2.1 Networkskeywords: network, node, host, address, name, packet-switched, protocol 网络是可以或多或少实时地相互发送和接收数据的计算机和其他设备的集合. 网络上的每台机器被称作结点(node),大多数结点是计算机,但是打印机,路由器,桥,网关,哑终端和可口可乐机都

Java Network Programming 笔记(2)

笔记   Java Network Programming 笔记 n5 二 查找Internet地址Chapter 6 Looking up Internet Addresses java.net.InetAddress类是java对IP地址的封装,这个类被其他大多数网络类使用,包括Socket,ServerSocket,URL,DatagramSocket,DatagramPacket.该类中包含hostName和address,但不是public的. 1 获得InetAddress对象Ine

Java Network Programming 笔记(3)

笔记   Java Network Programming 笔记 n5 三 利用URL类获取数据chapter 7 Retrieving Data with URLs 1 建立URL对象当JVM不支持url的协议时抛出MalformedURLException (1)public URL(String url) throws MalformedURLException (2)public URL(String protocol, String hostname, String file) thr

Network Programming Using Libevent - (III)

這次要談的跟 Network Programming 沒有直接的關係. 在寫 Nonblocking Network Program 通常要處理 Buffering 的問題,但並不好寫,主要是因為 read() 或 recv() 不保證可以一次讀到一行的份量進來. 在 libevent 裡面提供相當不錯的 Buffer Library 可以用,完整的說明在 man event 的時候可以看到,最常用的應該就是以 evbuffer_add().evbuffer_readline() 這兩個 Fun

Network Programming Using Libevent - (II)

接下來要談的是 libevent 要如何使用,不過為了方便起見,我們直接寫一個很簡單的 Time Server 來當作例子:當你連上去以後 Server 端直接提供時間,然後結束連線. 在這些例子裡面我以 FreeBSD 6.0 當作測試的平台,另外使用 libevent 1.1a 當作 Event-based Library,Compile 時請使用 gcc -I/usr/local/include -o timeserver timeserver.c -L/usr/local/lib -le

Improving (network) I/O performance ...

Introduction The reason for the current work is to analyze different methods for efficent delivery of network events from kernel mode to user mode. Five methods are examined, poll() that has been chosen as the better old-style method, standard /dev/p

linux c socket programming

原文:linux c socket programming http://54min.com/post/http-client-examples-using-c.html 好文章   PPT http://www.slideshare.net/Arbow/asynchronous-io-programming verygood   C: Linux Socket Programming, TCP, a simple HTTP client http://coding.debuntu.org/c-

Python中的线性优化,第 2 部分 在云中构建一个可扩展的基础架构

简介 这个由三部分组成的系列文章的第 1 部分介绍了在 Python 中使用 Pyomo 库进行线性优化的 基础知识.现在我们将介绍如何扩展它.Python 缺乏真实的操作系统线程,该如何扩展它?本文将向您介绍 如何组合使用这些技术来创建一个实际的可扩展基础架构,该架构可用于构建一个 Pyomo Web 解决方案.我 们组合使用了一个单线程事件循环.一个 AMQP 服务器和工作线程流程来创建一个模式,利用该模式扩展一个 线性优化系统.该基础架构也适用于 Python 或 Ruby 中的许多通用计