UNIX网络编程1.1概述 1.2时间获取客户函数 1.4错误处理包裹函数

逻辑上socket处于应用层与传输层之间。

ip,端口,协议,一起决定了网络的一个端点。

#include <iostream>

#include "unp.h"

int main(int argc, char** argv)
{
    int sockfd;
    int n;
    char recvline[MAXLINE + 1];
    struct sockaddr_in servaddr;

    if (argc != 2)
    {
        err_quit("usage: a.out <IPaddress>");
    }

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        err_sys("socket error");
    }

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port   = htons(13); // daytime server
    if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
    {
        err_quit("inet_pton error for %s", argv[1]);
    }

    if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) < 0)
    {
        err_sys("connect error");
    }

    while ( (n = read(sockfd, recvline, MAXLINE)) > 0)
    {
        recvline[n] = 0; // null terminate
        if (fputs(recvline, stdout) == EOF)
        {
            err_sys("fputs error");
        }
    }
    if (n < 0)
    {
        err_sys("read error");
    }

    exit(0);
}
ALL = daytimetcpcli daytimetcpsrv client server byteorder
CFLAGS = -Wall -g

all: ${ALL}

daytimetcpcli.o: daytimetcpcli.cpp
	g++ ${CFLAGS} -c daytimetcpcli.cpp -I ../lib -o daytimetcpcli.o
daytimetcpcli: daytimetcpcli.o
	g++ ${CFLAGS} daytimetcpcli.o ../libunp.a -I ../lib -o daytimetcpcli

daytimetcpsrv.o: daytimetcpsrv.cpp
	g++ ${CFLAGS} -c daytimetcpsrv.cpp -I ../lib -o daytimetcpsrv.o
daytimetcpsrv: daytimetcpsrv.o
	g++ ${CFLAGS} daytimetcpsrv.o ../libunp.a -I ../lib -o daytimetcpsrv

client.o: client.cpp
	g++ ${CFLAGS} -c client.cpp -o client.o
client: client.o
	g++ ${CFLAGS} client.o -o client

server.o: server.cpp
	g++ ${CFLAGS} -c server.cpp -o server.o
server: server.o
	g++ ${CFLAGS} server.o -o server

byteorder.o: byteorder.cpp
	g++ ${CFLAGS} -c byteorder.cpp -I ../lib -o byteorder.o
byteorder: byteorder.o
	g++ ${CFLAGS} byteorder.o -I ../lib -o byteorder

clean:
	rm *.o ${ALL}

时间: 2024-10-23 13:59:28

UNIX网络编程1.1概述 1.2时间获取客户函数 1.4错误处理包裹函数的相关文章

UNIX网络编程1.5一个简单的时间获取服务器程序1.6客户服务器程序索引表

#include "../lib/unpsunyj.h" #include <time.h> int main(int argc, char ** argv) { int listenfd; int connfd; sockaddr_in servaddr; char buff[MAXLINE]; time_t ticks; // TCP套接字的创建 // listenfd = Socket(AF_INET, SOCK_STREAM, 0); if ((listenfd =

【UNIX网络编程】概述

一般认为Web服务器程序是一个长时间(后台)运行的程序(即,守护程序,daemon) -> 此类程序会被以进程的形式初始化,守护进程程序的名称通常以字母“d”结尾,如httpd.通常由客户发起请求可以简化协议和程序本身,某些复杂的网络应用需要异步回调(asynchronous callback)通信,由服务器向客户发起请求信息. 在一个多任务的电脑操作系统中,守护进程(英语:daemon,英语发音:/?di?m?n/或英语发音:/?de?m?n/)是一种在后台执行的电脑程序.此类程序会被以进程的

UNIX网络编程--简介(一)【转】

本文转载自:http://blog.csdn.net/yusiguyuan/article/details/11760187 一.概述 a) 在编写与计算机通信的程序时,首先要确定的就是和计算机通信的协议,从高层次来确定通信由哪个程序发起以及响应在合适产生.大多数网络应用按照划分成客户和服务器来组织.在设计网络应用时,确定总是由客户发起请求往往能够简化协议和程序本身.当然一个较为复杂的网络应用还需要异步回调通信,也就是由服务器向客户发起请求消息. i. 在本书原著上多次提到客户(client)和

UNIX网络编程笔记(4)—TCP客户/服务器程序示例

TCP客户/服务器程序示例 这一章信息量开始大起来了,粗略来看它实现了简单的TCP客户/服务器程序,里面也有一些费解的细节. 1.概述 完整的TCP客户/服务器程序示例.这个简单的例子将执行如下步骤的一个回射服务器(这里的回射服务器就是服务简单的把客户端发送的消息返回给客户): 1)客户从标准输入读入一行文本,并写给服务器 2)服务器从网络输入读入这行文本,并回射给客户 3)客户从网络输入读入这行回射文本,并显示在标准输出上 这样实际上就构成了一个全双工的TCP连接. 本章就围绕了这个简单的TC

Unix网络编程 之 socket简介

概述 Socket的英文原意是"孔"或"插座",现在,作为Unix的进程通信机制,常常取"插座"这一意义.日常生活中常见的插座,有的是信号插座,有的是电源插座,有的可以接收信号或能量,有的可以发送信号或能量.举例来说,电话线与电话机之间需要一个插座(相当于两者之间的接口,这一部分装置物理上是存在的).对于网络编程,socket就相当于电话线与电话机之间的插座. 将电话系统与面向连接的Socket机制相比,两者之间有着惊人的相似的地方.以一个国家的

UNIX网络编程笔记(2)—套接字编程简介

套接字编程概述 说到网络编程一定都离不开套接字,以前用起来的时候大多靠记下来它的用法,这一次希望能理解一些更底层的东西,当然这些都是网络编程的基础- (1)套接字地址结构 大多说套接字函数都需要一个指向套接字地址结构的指针作为参数,每个协议族都定义它自己的套接字地址结构,这些结构都以sockadd_开头. IPV4套接字地址结构 IPv4套接字地址结构通常称为"网际套接字地址结构",以sockaddr_in命名,并定义在 /* Internet address. */ typedef

Unix网络编程-同步

1.互斥锁(量)和条件变量 默认情况下互斥锁和条件变量用于线程间同步,若将它们放在共享内存区,也能用于进程间同步. 1.1 互斥锁 1.概述: 互斥锁(Mutex,也称互斥量),防止多个线程对一个公共资源做读写操作的机制,以保证共享数据的完整性. 用以保护临界区,以保证任何时候只有一个线程(或进程)在访问共享资源(如代码段).保护临界区的代码形式: lock_the_mutex(...); 临界区 unlock_the_mutex(...); 任何时刻只有一个线程能够锁住一个给定的互斥锁. 下面

UNIX网络编程笔记(1)—传输层协议

开始学习网络编程的经典<UNIX网络编程>(第3版)作为研究生阶段的副本练习吧,厚厚一本书,希望能坚持看下去,坚持做些笔记. 1.TCP/IP协议概述 IPv4 网际协议版本4(Internet Protocol version 4),32位地址,为TCP.UDP.SCTP.ICMP和IGMP提供分组递送服务. IPv6 网际协议版本6(Internet Protocol version 6).128位地址,为TCP.UDP.SCTP和ICMPv6提供分组递送服务. TCP 传输控制协议(Tr

UNIX网络编程入门——TCP客户/服务器程序详解

前言 最近刚开始看APUE和UNP来学习socket套接字编程,因为网络这方面我还没接触过,要等到下学期才上计算机网络这门课,所以我就找了本教材啃了一两天,也算是入了个门. 至于APUE和UNP这两本书,书是好书,网上也说这书是给进入unix网络编程领域初学者的圣经,这个不可置否,但这个初学者,我认为指的是接受过完整计算机本科教育的研究生初学者,需要具有完整计算机系统,体系结构,网络基础知识.基础没打好就上来啃书反而会适得其反,不过对于我来说也没什么关系,因为基础课也都上得差不多了,而且如果书读