Socket通信编程例子

来源:互联网 发布:淘宝客开源程序 编辑:程序博客网 时间:2024/05/18 01:40
  1. package com.test;  
  2.   
  3. import java.io.*;  
  4. import java.net.ServerSocket;  
  5. import java.net.Socket;  
  6.   
  7. public class TalkServer{  
  8.     public static void main(String[] args) {  
  9.         try {  
  10.             ServerSocket server=null;  
  11.             try {  
  12.                 server=new ServerSocket(4700);  
  13.                 // 创建一个ServerSocket在端口4700监听客户请求  
  14.             } catch (Exception e) {  
  15.                 System.out.println("can not listen to:"+e);  
  16.                 // 出错,打印出错信息  
  17.             }  
  18.             Socket socket=null;  
  19.             try {  
  20.                 socket=server.accept();  
  21.                 // 使用accept()阻塞等待客户请求,有客户  
  22.                 // 请求到来则产生一个Socket对象,并继续执行  
  23.             } catch (Exception e) {  
  24.                 System.out.println("Error."+e);  
  25.                 // 出错,打印出错信息  
  26.             }  
  27.             String line;  
  28.             BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  29.             // 由Socket对象得到输入流,并构造相应的BufferedReader对象  
  30.             PrintWriter os=new PrintWriter(socket.getOutputStream());  
  31.             // 由Socket对象得到输出流,并构造PrintWriter对象  
  32.             BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));  
  33.             // 由系统标准输入设备构造BufferedReader对象  
  34.             System.out.println("Client:"+is.readLine());  
  35.             // 在标准输出上打印从客户端读入的字符串  
  36.             line=sin.readLine();  
  37.             // 从标准输入读入一字符串  
  38.             while(!line.equals("bye")){  
  39.                 // 如果该字符串为 "bye",则停止循环  
  40.                 os.println(line);  
  41.                 // 向客户端输出该字符串  
  42.                 os.flush();  
  43.                 // 刷新输出流,使Client马上收到该字符串  
  44.                 System.out.println("Server:"+line);  
  45.                 // 在系统标准输出上打印读入的字符串  
  46.                 System.out.println("Client:"+is.readLine());  
  47.                 // 从Client读入一字符串,并打印到标准输出上  
  48.                 line=sin.readLine();  
  49.                 // 从系统标准输入读入一字符串  
  50.                 // 继续循环  
  51.             }  
  52.             os.close(); // 关闭Socket输出流  
  53.             is.close(); // 关闭Socket输入流  
  54.             socket.close(); // 关闭Socket  
  55.             server.close(); // 关闭ServerSocket  
  56.               
  57.         } catch (Exception e) {  
  58.             System.out.println("Error:"+e);  
  59.             // 出错,打印出错信息  
  60.         }  
  61.     }  
  62. }  

 

2. 客户端程序

 

 

Java代码  收藏代码
  1. package com.test;  
  2.   
  3. import java.io.*;  
  4.   
  5. import java.net.*;  
  6.   
  7. public class TalkClient {  
  8.   
  9.     public static void main(String args[]) {  
  10.         try {  
  11.             Socket socket = new Socket("127.0.0.1"4700);  
  12.             // 向本机的4700端口发出客户请求  
  13.   
  14.             BufferedReader sin = new BufferedReader(new InputStreamReader(  
  15.                     System.in));  
  16.   
  17.             // 由系统标准输入设备构造BufferedReader对象  
  18.   
  19.             PrintWriter os = new PrintWriter(socket.getOutputStream());  
  20.   
  21.             // 由Socket对象得到输出流,并构造PrintWriter对象  
  22.   
  23.             BufferedReader is = new BufferedReader(new InputStreamReader(socket  
  24.                     .getInputStream()));  
  25.   
  26.             // 由Socket对象得到输入流,并构造相应的BufferedReader对象  
  27.   
  28.             String readline;  
  29.   
  30.             readline = sin.readLine(); // 从系统标准输入读入一字符串  
  31.   
  32.             while (!readline.equals("bye")) {  
  33.   
  34.                 // 若从标准输入读入的字符串为 "bye"则停止循环  
  35.   
  36.                 os.println(readline);  
  37.   
  38.                 // 将从系统标准输入读入的字符串输出到Server  
  39.   
  40.                 os.flush();  
  41.   
  42.                 // 刷新输出流,使Server马上收到该字符串  
  43.   
  44.                 System.out.println("Client:" + readline);  
  45.   
  46.                 // 在系统标准输出上打印读入的字符串  
  47.   
  48.                 System.out.println("Server:" + is.readLine());  
  49.   
  50.                 // 从Server读入一字符串,并打印到标准输出上  
  51.   
  52.                 readline = sin.readLine(); // 从系统标准输入读入一字符串  
  53.   
  54.             } // 继续循环  
  55.   
  56.             os.close(); // 关闭Socket输出流  
  57.   
  58.             is.close(); // 关闭Socket输入流  
  59.   
  60.             socket.close(); //关闭Socket  
  61.   
  62.         } catch (Exception e) {  
  63.   
  64.             System.out.println("Error" + e); //出错,则打印出错信息  
  65.   
  66.         }  
  67.   
  68.     }  

  1. }  

 服务器端:ServerDemo.java

package com.lanber.socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {

    /**
     * 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,服务器必需先接收这条信息,
     *      而后才可以向客户端发送信息,否则将会有运行时出错。
     * @param args
     */
    public static void main(String[] args) {
        ServerSocket ss = null;
        try {
            ss = new ServerSocket(8888);
            //服务器接收到客户端的数据后,创建与此客户端对话的Socket
            Socket socket = ss.accept();
            //用于向客户端发送数据的输出流
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            //用于接收客户端发来的数据的输入流
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            System.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());
            //服务器向客户端发送连接成功确认信息
            dos.writeUTF("接受连接请求,连接成功!");
            //不需要继续使用此连接时,关闭连接
            socket.close();
            ss.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

    客户端:ClientDemo.java

package com.lanber.socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Socket socket = null;
        try {
            socket = new Socket("localhost",8888);
            //获取输出流,用于客户端向服务器端发送数据
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            //获取输入流,用于接收服务器端发送来的数据
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            //客户端向服务器端发送数据
            dos.writeUTF("我是客户端,请求连接!");
            //打印出从服务器端接收到的数据
            System.out.println(dis.readUTF());
            //不需要继续使用此连接时,记得关闭哦
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}





0 0
原创粉丝点击