socket发送接收消息(String message)

package com.qingshan.net.socket; 
 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.Socket; 
 
/**
* <pre>
* 客户端:发送信息/接收服务器反馈信息
* </pre>
* <hr Color="green" ></hr> 
* 2012 Qingshan Group 版权所有
* <hr Color="green" ></hr> 
* @author  thetopofqingshan
* @version 1.0.0
* @since   JDK 1.5
* @date    2012-4-25
*/ 
public class Client { 
 
    public void run(String ip, int port){ 
        OutputStream os = null; 
        InputStream is = null; 
        try {
            Socket client = new Socket(ip, port);//接连目标ip:192.168.1.114,port:4321
            os = client.getOutputStream();// 
            System.out.println("正在发送信息..."); 
            os.write("发了一条给到没有, 收到了请回复一样的信息".getBytes());//发送信息 
            os.flush();//注意:如果不使用flush方法,服务端将收到客户端发送的信息 
            client.shutdownOutput();
            is = client.getInputStream();// 
            byte[] buf = new byte[1024*8];//缓冲区 
            String msg="";
          
            for(int len=is.read(buf);len>0;len=is.read(buf)){
            msg+=new String(buf, 0, len);
            }
            client.shutdownInput();
            System.out.println("正在接收回复信息..."); 
            System.out.println("服务器返回的信息: "+msg); 
            System.out.println("接收回复信息完成"); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }finally{ 
            //所有服务 
            try { 
                os.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            try { 
                is.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
     
    public static void main(String[] args) { 
        Client c=new Client();
        String ip="localhost";
       // ip="www.baidu.com";
       int port=8888;
       //int port=80;
        c.run(ip, port);
    } 


package com.qingshan.net.socket; 
 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.concurrent.Executor; 
import java.util.concurrent.Executors; 
 
/**
* <pre>
*  服务器:处理客户端发来的信息, 处理后作为反馈信息返回
* </pre>
* <hr Color="green" ></hr> 
* 2012 Qingshan Group 版权所有
* <hr Color="green" ></hr> 
* @author  thetopofqingshan
* @version 1.0.0
* @since   JDK 1.5
* @date    2012-4-25
*/ 
public class Server { 
    private ServerSocket server; 
    private Socket client; 
 
    public Server() { 
        try { 
            this.server = new ServerSocket(8888);//接收请求的端口 
            System.out.println("服务已启动...."); 
            while (true) { 
                this.client = server.accept();//接收用户请求, 无在此等待, 有开启新的线程响应请求 
                if (client != null) { 
                    //开启接收与处理信息的服务 
                    Executor es = Executors.newCachedThreadPool();//线程池 
                    es.execute(new Recieve(client));//开启新的线程 
                } 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
 
    /**
     * <pre>
     * 线程:用于接收与处理信息
     * </pre>
     * <hr Color="green" ></hr> 
     * 2012 Qingshan Group 版权所有
     * <hr Color="green" ></hr> 
     * @author  thetopofqingshan
     * @version 1.0.0
     * @since   JDK 1.5
     * @date    2012-4-25
     */ 
    public class Recieve implements Runnable { 
        public Recieve() { 
        } 
 
        public Recieve(Socket cleint) { 
            this.client = cleint; 
        } 
 
        Socket client; 
 
        public void run() { 
            try {
            String response="接收到 socket客户端信息 ";
                System.out.println("正在接收消息..."); 
                InputStream is = client.getInputStream(); 
                String msg = client.getInetAddress().getHostAddress() + ": "; 
                byte[] buf = new byte[1024*8];
                for(int len=is.read(buf);len>0;len=is.read(buf)){
                msg+=new String(buf, 0, len);
                }
                client.shutdownInput();
                System.out.println("客户端消息:"+msg); 
                System.out.println("正在发送信息..."); 
                OutputStream os = client.getOutputStream(); 
                os.write(response.getBytes());//发送信息 
                os.flush(); 
                client.shutdownOutput();
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } 
 
    } 
 
    public static void main(String[] args) { 
        new Server(); 
    } 


猜你喜欢

转载自lvwenwen.iteye.com/blog/1604130