当前位置:编程学习 > JAVA >>

java编程_socket_套接字_网络编程

实现原理:
============================================================ 
服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,
在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),
等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。  
============================================================ 
客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,
关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
============================================================ 
服务器端代码:
 
 1 package com.b510.socket1703;
 2
 3 import java.io.*;
 4 import java.net.Socket;
 5 import java.net.ServerSocket;
 6
 7 /**
 8  * 服务器断的工作就是在指定的端口上监听
 9  * <li>建立连接</li>
10  * <li>打开输出流</li>
11  * <li>封装输出流</li>
12  * <li>向客户端发送数据</li>
13  * <li>关闭打开的输出流</li>
14  * <li>关闭打开的socket对象</li>
15  *
16  * @author Hongten
17  *
18  * @time 2012-4-29  2012
19  */
20 public class TestServer {
21     public static void main(String args[]) {
22         try {
23             // 指定服务器端的端口号为8888
24             ServerSocket s = new ServerSocket(8888);
25             while (true) {
26                 // 建立连接
27                 Socket socket = s.accept();
28                 // 打开输出流
29                 OutputStream os = socket.getOutputStream();
30                 // 封装输出流
31                 DataOutputStream dos = new DataOutputStream(os);
32                 // s<li>.getInetAddress()获取远程ip地址,s<li>.getPort()远程客户端的断后好
33                 // 向客户端发送数据
34                 dos.writeUTF("你好,客户端地址信息: " + socket.getInetAddress()
35                         + "\t客户端通信端口号: " + socket.getPort());
36                 dos.writeUTF("i'm a server ,my name is hongten!");
37                 // 关闭打开的输出流
38                 dos.close();
39                 // 关闭打开的socket对象
40                 socket.close();
41             }// 开始下一此循环
42         } catch (IOException e) {
43             e.printStackTrace();
44         }
45     }
46 }
 
客户端代码:
 
 1 package com.b510.socket1703;
 2
 3 import java.io.*;
 4 import java.net.Socket;
 5
 6 /**
 7  * 客户端
 8  * @author Hongten
 9  *
10  * @time 2012-4-29 2012
11  */
12 public class TestClient {
13     public static void main(String args[]) {
14         try {
15             // 创建socket对象,指定服务器的ip地址,和服务器监听的端口号
16             // 客户端在new的时候,就发出了连接请求,服务器端就会进行处理,如果服务器端没有开启服务,那么
17             // 这时候就会找不到服务器,并同时抛出异常==》java.net.ConnectException: Connection
18             // refused: connect
19             Socket s1 = new Socket("127.0.0.1", 8888);
20             // 打开输入流
21             InputStream is = s1.getInputStream();
22             // 封装输入流
23             DataInputStream dis = new DataInputStream(is);
24             // 打印服务器端发送过来的信息
25             System.out.println(dis.readUTF());
26             System.out.println(dis.readUTF());
27             // 关闭输入流
28             dis.close();
29             // 关闭打开的socket对象
30             s1.close();
31         } catch (IOException e) {
32             e.printStackTrace();
33         }
34     }
35 }
 
如果服务器端没有打开,这时候运行客户端,出现的结果:
 
 1 java.net.ConnectException: Connection refused: connect
 2     at java.net.PlainSocketImpl.socketConnect(Native Method)
 3     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
 4     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
 5     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
 6     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
 7     at java.net.Socket.connect(Socket.java:518)
 8     at java.net.Socket.connect(Socket.java:468)
 9  &nbs
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,