1.TCPTCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。2.嵌套字套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。函数调用1int socket(int domain, int type,int protocol)
参数解释用法domain网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等).AF_UNIX只能够用于单一的Unix 系统进程间通信,而AF_INET是针对Internet的,因而可以允许在远程主机之间通信(当我们 man socket时发现 domain可选项是 PF_而不是AF_,因为glibc是posix的实现所以用PF代替了AF,不过我们都可以使用的).type网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等)SOCK_STREAM表明使用的是TCP 协议,这样会提供按顺序的,可靠,双向,面向连接的比特流.SOCK_DGRAM 表明我们用的是UDP协议,这样只会提供定长的,不可靠,无连接的通信.protocol由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了
socket为网络通讯做基本的准备.成功时返回文件描述符,失败时返回-1,看errno可知道出错的详细情况2int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
参数解释sockfd由socket调用返回的文件描述符addrlensockaddr结构的长度my_addrsockaddr结构的长度
3int listen(int sockfd,int backlog)
参数解释sockfd是bind后的文件描述符backlog设置请求排队的最大长度.当有多个客户端程序和服务端相连时, 使用这个表示可以介绍的排队长度.
4int accept(int sockfd, struct sockaddr *addr,int *addrlen)
参数解释sockfdsocket返回的文件描述符serv_add储存了服务器端的连接信息.其中sin_add是服务端的地址addrlenserv_addr的长度
connect函数是客户端用来同服务端连接的.成功时返回0,sockfd是同服务端通讯的文件描述符 失败时返回-1.编译并运行编译
gcc -o server-while-tcp.out server-while-tcp.cgcc -o client.out client.c
运行
rver-while-tcp.out./client.out 192.168.1.*** //新的窗口打开
修改服务器为多线程模式优点 1.多线程发送数据,即一个服务器对应多个客户端,最多可以同时监听10个客户端。2.客户端向服务器发起连接请求,成功后打印连接信息。3.客户端向服务器发送数据后,服务器端打印数据。4.服务器将得到的数据全部转换为大写后返回到客户端。5.客户端打印出从服务器端返回的数据。server(服务器端)源码
#include <syspes.h> /* 网络编程所需头文件*/
#include <sys/socket.h> /* 网络编程所需头文件*/
#include <string.h>
#include <netinet/in.h> /* 包含类似inet_ntoa函数的头文件 */
#include <arpa/inet.h> /* 包含类似inet_ntoa函数的头文件 */
#include <unistd.h> /* 包含close函数、forck函数等系统调用函数的头文件 */
#include <stdio.h>
#include <signal.h> /* 包含signal函数的头文件 */
#define SERVER_PORT 8888 /* 监听端口号 */
#