Socket编程
Posted huih
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket编程相关的知识,希望对你有一定的参考价值。
Socket变成的基本步骤(TCP/UDP)
常见socket连接时,可以指定使用的传输层协议,socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该socket连接就是一个TCP连接。Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求。典型的处理步骤如下:(服务器端建立连接过程)
1、构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。
2、重复如下几个步骤:
a. 调用socket的accept()方法来获得下面客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。
b. 通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。
c. 结束的时候调用socket实例的close()方法关闭socket连接。
客户端的请求过程稍微有点不一样:
1、构建socket实例,通过指定的远程服务器地址和端口来建立连接。
2、通过socket实例包含的InputStream和OutputStream来进行数据的读写。
3、操作结束后调用socket实例的close方法,关闭。
1 //简单的 Client/Server程序设计
2 //服务端
3 public class Server{
4 public static void main(String args[]){
5 try{
6 ServerSocket server = null;
7 try{
8 server = new ServerSocket(4700);
9 //创建一个ServerSocket在端口4700监听客户请求
10 }catch(Exception e){
11 System.out.println("can not listen to:"+e);
12 //出错,打印出错信息
13 }
14 System.out.ptintln("server------------------------");
15 Socket socket = null;
16 try{
17 socket = server.accept();
18 //使用accept阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行
19 }catch(Exception e){
20 System.out.println("Error."+e);
21 //出错,打印出错信息
22 }
23 String line;
24 BufferedReader is =new BufferedReader(new InputStreamReader(socket.getInputStream()));
25 //由socket对象得到的输入流,并构造相应的BufferedReader对象
26 PrintWriter os = new PrintWriter(socket.getOutputStream());
27 //由socket对象得到输出流,并构造PrintWriter对象
28 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
29 //由系统标准输入设备构造BufferedReader对象
30 System.out.println("Client:"+is.readLine());
31 //在标准输出上打印从客户端读入的字符串
32 line = sin.readLine();
33 //从标准输入读入一字符串
34 while(!line.equals("bye")){
35 //如果该字符串为"bye",则停止循环,向客户输出该字符串
36 os.println(line);
37 //刷新输出流,使Client马上受到该字符串
38 os.flush();
39 //从Client读入一字符串,并打印到标准输出上
40 System.out.println("Client:"+is.readLine()+"
");
41 line = sin.readLine();
42 //从系统标准输入读入一字符串
43 }//继续循环
44 os.close();//关闭Socket输出流
45 is.close();
46 socket.close();
47 server.close();
48 }catch(Exception e){
49 System.out.println("Error:"+e);
50 }
51 }
52 }
53
54 //客户端
55 public class Client{
56 public static void main(String args[]){
57 try{
58 Socket socket = new Socket("127.0.0.1",4700);
59 //向本机的4700端口发出客户请求
60 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
61 //由系统标准输入设备构造BufferedReader对象
62 PrintWriter os = new PrintWriter(socket.getOutputStream());
63 //由socket对象得到的输出流,并构造PrintWriter对象
64 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
65 System.out.println("Client----------------------------");
66 //由socket对象得到输入流,并构造相应的BufferedReader
67
68 String readline;
69 readline = sin.readLine();//从系统标准输入读入一字符串
70 while(!readline.equals("bye")){
71 //若从标准输入读入的字符串为"bye"则停止循环
72 os.println(readline);
73 //将从系统标准输入读入的字符串输出到Server
74 os.flush();
75 //刷新输出流,使Server马上收到该字符串
76 System.out.println("Server:"+is.readline());
77 //从Server读入一字符串,并打印到标准输出上
78 readline = sin.readLine();//从系统标准输入读入一字符串
79 }//继续循环
80 os.close();//关闭socket输出流
81 is.close();//关闭socket输入流
82 socket.close();//关闭socket
83 }catch(Exception e){
84 System.out.println("Error:"+e);//出错,则打印出错信息
85 }
86 }
87 }
以上是关于Socket编程的主要内容,如果未能解决你的问题,请参考以下文章