《Java从入门到放弃》JavaSE入门篇:网络编程(入门版)

要进行网络编程,首先要搞清楚目的是什么。java

网络编程说简单点就是在网络上的计算机进行数据的交互。编程

wKiom1nDU8jBR29DAADRe0E88II285.png

既然要进行数据交互,那就须要有一个发送方和一个接受方。缓存

按网络上的说法,就是一个攻一个受·j_0025.gif服务器

固然,现阶段网上的电脑通常来讲都是既接受数据,也能发送数据的,因此说这些电脑都是“插座型”的,进可攻,退可受!!!网络

好吧,仍是使用专业点的名字吧:客户端/服务器socket

 

那么具体到两台电脑,它们是如何来交互数据的呢?请看下图:spa

wKioL1nDVIrikiO8AACwoz0sGOs008.png


从步骤来分析:code

1、服务器端程序对象

    1.1建立一个服务器套接字(ServerSocket),并绑定到指定端口。blog

    1.2侦听来自客户端的请求,若是接受到链接则返回套接字对象(socket)。

    1.3得到输入/输出流,也就是进行数据的接收或发送。

    1.4关闭套接字(socket)。

2、客户端程序

    2.1建立一个套接字,向服务器指定商品发送请求。

    2.2与服务器正确链接后开始数据的接收或发送。

    2.3关闭套接字。

 

步骤分析完了,接下来就是实施了。

服务器端代码以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public  class  MyServer {
     private  static  final  int  SERVER_PORT =  9527 // 指定侦听端口
 
     public  MyServer() {
         try  {
             ServerSocket ss =  new  ServerSocket(SERVER_PORT);  // 建立服务器套接字
             System.out.println( "服务端已启动,正在等待客户端..." );
             Socket s = ss.accept();  // 侦听来自客户端的请求
             InputStream in = s.getInputStream();  // 得到输入流,用来接收数据
             OutputStream out = s.getOutputStream();  // 得到输出流,用来发送数据
             byte [] buf =  new  byte [ 1024 ];  // 数据缓存
             int  len = in.read(buf);  // 从输入流中读取数据
             String strFromClient =  new  String(buf,  0 , len);
             System.out.print( "来自客户端的信息>>" );
             System.out.println(strFromClient);
             String strToClient =  "我也很好!" ;
             out.write(strToClient.getBytes());  // 往输出流中发送数据
             // 关闭输入流和输出流
             in.close();
             out.close();
             // 关闭通讯套接字和服务器套接字
             s.close();
             ss.close();
             System.out.println( "服务端已关闭。" );
         catch  (IOException e) {
             e.printStackTrace();
         }
     }
     
     public  static  void  main(String[] args) {
         MyServer ms =  new  MyServer();
     }
}

客户端代码以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public  class  MyClient {
     private  static  final  int  SERVER_PORT =  9527 ;   //服务器的侦听端口
     public  MyClient() {
         try  {  
             //因为服务端也是运行在本机,因此建立本机的InetAddress对象
             InetAddress address = InetAddress.getByName( "localhost" );
             Socket s =  new  Socket(address, SERVER_PORT);   //向服务器侦听端口发出请求
             System.out.println( "客户端已启动。" );
             InputStream in = s.getInputStream();      //得到输入流,用来接收数据
             OutputStream out = s.getOutputStream();   //得到输出流,用来发送数据
             String strToServer =  "你好!" ;
             out.write(strToServer.getBytes());    //往输出流中发送数据
             byte [] buf =  new  byte [ 1024 ];
             int  len = in.read(buf);               //从输入流中读取数据
             String strFromServer =  new  String(buf,  0 , len);  
             System.out.print( "来自服务端的回答>>" );
             System.out.println(strFromServer);
             in.close();out.close();   //关闭输入流和输出流
             s.close();                //关闭通讯套接字
             System.out.println( "客户端已关闭。" );
         catch  (UnknownHostException nhe) {
             System.out.println( "未找到指定主机..." );
         catch  (IOException ioe) { 
             ioe.printStackTrace();
         }
     }
     
     public  static  void  main(String[] args) {
         MyClient mc =  new  MyClient();
     }
}

 

先运行服务器端

wKioL1nDWzizH3DqAAAdegLMUa8760.png

 

再运行客户端,能够发现服务器端的内容发生了变化

wKiom1nDW9zQWpbWAAAjBpnMi-k530.png

再切换到客户端的输出窗口

wKiom1nDXAzAcF5hAABHB78MZ7I848.png

客户端的输出内容以下:

wKiom1nDXAzwzJCUAAAfg4FCVAI164.png

 

有兴趣的看官能够修改代码,让它变成能够从控制台反复输入文字来交互。研究得更深些的朋友,能够尝试发送文件。

网络编程最基本的内容到这儿就结束了,此处应有点赞!!!j_0028.gif

 

 “软件思惟”博客地址:51CTO博客园,感兴趣的小伙伴能够去看相关的其它博文。  

相关文章
相关标签/搜索