服务器和客户端的那些事儿

各司其职:

1.客户端:向服务器提出请求和发送请求;

2.服务器:接受客户端的请求并回复请求;

是的,当客户端通过一些手段向服务器提出请求后,服务器接受到请求就会根据请求给出对应的数据回应!

那客户端和服务器具体是怎么沟通的呢???

 

客户端和服务器沟通的条件

1.通信实体:客户端(电脑),服务器(文件服务器);

2.通信媒介(传递“”信息“”的媒介),如电缆或光缆,当然也可能是介于某一频谱范围内的看不见的无线电波;

这些“信息”原本也是一段段文字,但是通过某些通讯协议处理后,就成了通信媒介可以识别的一些信号,这些信号进过一系列节点(能够接受信息并能做出处理的系统,如路由器)的帮助最终到达服务器,到达服务器后这些“信号”会按照协议转化成服务器能够识别的信息,懂了吧!更过细节多翻阅TCP/IP;

 

用socket套接字实现应用程序间的通信

1.应用程序作为服务器时,可以用以下代码实现:

   ServerSocket server=new ServerSocket(int Port);

 (server是创建的服务器对象,Port为该服务器占用的端口号,只有当服务器和客户端的端口号相同时才能连接成功;)

    在服务器端进行等待: Socket socket2=server.accept();//服务器等待客户机的访问,程序运行到此处将被堵塞,即不向下继续执行,直到有客户机访问该服务器

2.应用程序作为客户端时,可以用如下代码来创建将与端口号一致的服务器相连的客户端:

   Socket client=new Socket(String IP,int Port);(client是创建的客户端对象,IP、Port分别是该客户端占用的IP号、端口号,此时服务器的socket2被声明成功,堵塞状态不复存      在,程序继续向下执行)

3、客户端和服务器连上后,需要进行他们之间的通信,怎么办呢?可以分别获取两个对象的输入、输出流对象,以进行读写操作, 获取客户端的输入、输出流对象:

   InputStream is_client=socket.getInputStream(); //is_client是客户端socket的输入流对象

   OutputStream os_client=socket.getOutputStream(); //os_client是客户端socket的输入流对象

  同样的,可以获取服务器端的输入、输出流对象:

 InputStream is_server=socket2.getInputStream();//is_server是客户端socket的输入流对象

 OutputStream os_server=socket2.getOutputStream(); //os_server是客户端socket的输入流对象 

4、有了输入、输出流对象后,可以用读写操作进行服务器和客户端之间的通信了。

a、客户端写入信息,服务器获取信息:

      is_client.write("hello#".getBytes());//客户端写入"hello”,'#'是信息结束的协议

      StringBuffer sb=new StringBuffer();//sb是长度可动态变化的字符串对象,便于添加字符和字符串,用来保存下面服务器读到的信息

      char c;//用于保存读到的单个字节

      c=os_server.read();//将读到的一个字节存储到变量c中

      while(c!='#'){//当读到的字符不是表示信息结束的'#'时,就一直读取下去

              sb.append(c);//将读到的字符添加到sb中

              c=os_server.read();//继续读取下一个字节

       }

      接下来,服务器就可以对保存在sb中的信息进行相应的处理

b、同理,服务器回应客户端的过程,也就是服务器写入信息(os_server.write()),客户端读取信息(is_client.read())的,只是将上面的输入、输出流对象变换一下;

posted on 2017-10-11 12:01  龟和兔子赛跑  阅读(95)  评论(0)    收藏  举报

导航