客户端网络编程和服务器网络编程的步骤

客户端(client)是指网络编程中首先发起连接的程序,一般用于实现程序界面和基本逻辑。在进行实际的客户端编程时,无论客户端复杂还是简单,以及客户端实现的方式如何,客户端的编程都是主要由3个步骤实现:

(1)建立网络连接

       客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。

(2)交换数据

      交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个相应数据给客户端,如果客户端不发送请求,服务器就不响应。

(3)关闭网络连接

       在数据交换完以后,关闭网络连接,释放程序占有的端口、内存等系统资源,结束网络编程。

这是最基本的步骤,在实际实现时,步骤(2)会重复出现,在进行代码组织时,由于网络编程是比较耗时的操作,所以一般开启专门的现场进行网络通信。

  

服务器端(server)是指在网络编程中被动等待连接的程序,一般用于实现程序的核心逻辑以及数据储存等核心功能。服务器端的编程步骤和客户端不同,由4个步骤实现,依次是:

(1)监听端口

       服务器属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。这个端口及时服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。

(2)获得连接 

(3)交换数据

       服务器端的数据交换步骤是首先接受客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单就是说,先接收再发送,这和客户端的数据交换顺序不同。

(4)关闭连接

 

简单的客户端网络编程和服务端网络编程:

客户端

package tcp;
import java.io.*;
import java.net.*;
/**
 * 简单的Soket客户端
 *功能为:发送字符串"Hello"到服务器端,并打印出服务器的反馈
 */
public class SimpleSocketClient {
 public static void main(String[] args){
  Socket s = null;
  InputStream is = null;
  OutputStream os = null;
  //服务器IP地址
  String serverIP = "127.0.0.1";
  //服务器端端口号
  int port = 10000;
  //发送内容
  String data = "Hello";
  try{
   //建立连接
   s = new Socket(serverIP,port);
   //发送数据
   os = s.getOutputStream();
   os.write(data.getBytes());
   //接收数据
   is = s.getInputStream();
   byte[] b = new byte[1024];
   int n = is.read(b);
   //输出反馈数据
   System.out.println("服务器反馈:"+new String(b,0,n));
   
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    //关闭流和连接
    is.close();
    os.close();
    s.close();
   }catch(Exception e2){
    
   }
  }
 }

}

 

 

服务器端

* *echo服务器
 * 功能:将客户端发送的内容反馈给客户端
*/
public class SimpleSocketServer {
 public static void main(String[] args){
  ServerSocket ss = null;
  Socket s = null;
  InputStream is = null;
  OutputStream os = null;
  int port = 10000;
  try{
   //建立连接
   ss = new ServerSocket(port);
   //获得连接
   s = ss.accept();
     //接收客户端发送内容
   is = s.getInputStream();
   byte[] b = new byte[1024];
   int n = is.read(b);
   //输出
   System.out.println("客户端发送内容为:"+new String(b,0,n));
   //向客户端发送反馈内容
   os = s.getOutputStream();
   os.write(b,0,n);
   
  }catch (Exception e){
   e.printStackTrace();
  }finally{
   try{
    //关闭流和连接
    os.close();
    is.close();
    s.close();
    ss.close();
   }catch(Exception e){
    
   }
  }
  
 }

}

 

复用的客户端网络编程和服务器端网络编程

客户端

package tcp;

import java.io.*;
import java.net.*;
/**
 * 复用连接的Soket客户端
 *功能为:发送字符串"Hello"到服务器端,并打印出服务器的反馈
 */
public class MulSocketClient {
 public static void main(String[] args){
  Socket s = null;
  InputStream is = null;
  OutputStream os = null;
  //服务器IP地址
  String serverIP = "127.0.0.1";
  //服务器端端口号
  int port = 10000;
  //发送内容
  String data [] = {"First","Second","Third"};
  
  try{
   //建立连接
   s = new Socket(serverIP,port);
   //初始化流
   os = s.getOutputStream();
   is = s.getInputStream();
   byte[] b = new byte[1024];
   for(int i = 0;i<data.length;i++){
    //发送数据
    os.write(data[i].getBytes());
    int n = is.read(b);
    //输出反馈数据
    System.out.println("服务器反馈:" + new String(b,0,n));
   }
   
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    //关闭流和连接
    is.close();
    os.close();
    s.close();
   }catch(Exception e2){
    
   }
  }
 }

}

 

服务器端

package tcp;
import java.io.*;
import java.net.*;
/**
 *复用连接的echo服务器
 *功能:将客户端发送的内容反馈给客户端
 */
public class MulSocketServer {
 public static void main(String[] args){
  InputStream is = null;
  OutputStream os = null;
  Socket s = null;
  ServerSocket ss = null;
  //监听端口号
  int port = 10000;
  try{
  //建立连接
   ss = new ServerSocket(port);
   System.out.println("服务器已启动");
  //获得连接
   s = ss.accept();
   is = s.getInputStream();
   os = s.getOutputStream();
   byte[] b = new byte[1024];
   for(int i = 0; i<3;i++){
    int n = is.read(b);
    System.out.println("客户端发送内容为:"+new String(b,0,n));
  //向客户端反馈内容
    os.write(b,0,n);
   }
  }catch (Exception e){
   e.printStackTrace();
  }finally{
   try{
  //关闭流和连接
   is.close();
   os.close();
   s.close();
   ss.close();
  }catch(Exception e){
   
  }
   
  
 }
 
 
 }
}

 

posted on 2012-04-30 19:29  belingzhong  阅读(2043)  评论(0编辑  收藏  举报

导航