TCP连接建立之后,
服务器和
客户端就可以互通数据了,可以通过>首先,为了便于理解,我们一般把
网络分为多个层次,这个层次的概念是很重要的基础概念,你可以参考阅读经典的谢希仁老师翻译的《计算机网络》。 在进程之间的网络通信一般都是在“网络层”即IP层,我们编写程序一般也都是基于这个层次或者这个层次之上的传输层或者应用层。语言(实际上是 *** 作系统和库函数)提供了封装好的函数,让我们可以不用关心链路层以及物理层的细节。 下面逐一回答你的问题: 1)初始化网络环境是什么意思,有什么作用? 为了建立通信连接,我们需要明确当前的网络环境是怎样的,因为和单机系统的进程通信不同,网络进程间通信比较复杂,而且 *** 作系统支持的网络协议也会很多,不同协议的工作方式不同,地址格式也不同。为了解决多重协议的识别问题,我们必须引入一些用于区分的概念并对其初始化。 2)套接字的意思和作用是什么? 套接字提供了对网络连接的一系列封装——虽然你可以自己写,但完全没有必要不是么?它根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。例如TCP/IP的socket提供三种类型套接字(流式、数据报、原始),分别对应面向连接的服务(例如FTP)、无连接服务(例如NFS)和较底层的连接服务(例如IP或者自定义协议),你可以基于套接字提供的封装比较方便的实现网络连接服务。 在IP层次以上网络通信的基本原理和电话或者电报的基本原理是非常相近的。TCP连接类似电话,UDP连接类似电报。 下面我以一些代码片段(注意是帮助理解的片段,不能编译执行)简单地对其进行类比: fd = socket(AF_INET, SOCK_STREAM, 0); addresssin_family = AF_INET; addresssin_addrs_addr = htonl(INADDR_ANY); addresssin_port = htons(1234); address_len = sizeof(address); //这就是在初始化网络环境,类似于你朋友买了一个电话,同时到电信公司申请了号码,然后登记的分机是1234 bind(fd, (struct sockaddr )&address, address_len); //好了,这是做了一个bind(绑定),类似于电信公司把电话号码和你朋友家的哪个端口线连上了。 listenfd = listen(fd, 64) while(1){ 一系列等待客户端的 *** 作,从略 } //这里在服务器端一般会有一个无限循环,服务器会一直等待来自客户端的消息,类似于你朋友一直在等待你的电话。客户端,类似的也有买电话(socket创建)和初始化,我就不写了,预先设定好你要拨打的分机号码是1234 rtval = connect(fd, (struct sockaddr )&address, address_len); //上面的语句表示开始拨打电话了: //如果你的朋友接了电话,通话建立了(上面语句的返回值rtval不为-1),你就可以讲话: writen(fd, (void )data, strlen(data)); //对方讲话,你听: len = readline(fd, (void )data2, 100); //讲完了,挂电话,类似于下面的语句: close(fd); 整体情况大概就是这样,所以可以看到计算机的实现和日常生活是很接近的!希望这可以帮助你理解网络通信。 最后建议阅读TCP/IP详解之卷2(实现),里面很多例子不长但很经典,对于打好基础很有帮助。Socket通信:
作为服务器端:
//生成服务器端,监听服务器设定的端口
ServerSocket
socketServer
=
new
ServerSocket(端口号);
//建立客户端和服务器端的链接,这时再看客户端
Socket
socket
=
socketServeraccept();
作为客户端:
//新建一个Socket,包含服务器端的IP和端口号,这样在服务器启动情况下可以建立和服务器的链接
Socket
socket
=
new
Socket("IP地址","端口号");
这时,服务器端和客户端的连接已经建立,如果需要通信和传输数据的话分别在服务器端、客户端新建流对象,可以通过流对象实现双方之间的互通
有关流的内容自己看书体会下就能写出B/S结构的通信了。客户端之间的通讯有两个办法。
1 服务器中转
2 服务器上注册后,客户端之间直接通信。
对于第一种方法,大多比较简单。查一下socket的文章,还有大把现成的代码给你看。
第二个方法就稍微复杂一些。
但原理都一样。客户端A,链接服务器后,地址信息就保存到了服务器上。除了保持与服务器的通信外。另外开启一个 Socket,绑定到另一个端口,并且一直监听此端口。
客户端B连接服务器,从服务器上获取客户端A的地址信息。把客户端A当成服务器,连接A。(1) 连接 当客户在浏览器上键入或单击一个URL时,客户程序就在网络上搜索定位正确的服务器,并与其连接。
(2) 请求 在连接后,客户程序向服务器发出一个请求,要求服务器向自己发送指定的信息。
(3) 响应 服务器收到请求,就向客户端传回所需要的文件。
(4)关闭 服务器发出数据后,就断开与客户端的连接,以便接受其他客户的连接。客户端程序和服务器之间通信用这是网络传输层的问题,在传输层上主要就是两种数据包,即为TCP(可靠连接)、UDP(不可靠连接),这个其实与你想要做的服务器和程序设计没有大的关系,不知道你要搭建什么服务器,是windows还是linux 服务器,在windows下面一般是ASPnet +SQL server (很多人现在也在windows下做apacha+php+mysql); 在linux下面是apacha+php+mysql;网站使用的是>
评论列表(0条)