您的位置:首页 > 编程语言

客户端和服务器端的通信(Socket编程)

2015-06-11 23:40 876 查看

Socket编程

此篇博文的来源


自己一直以为将网络编程这块的知识掌握的还可以了,今天突然有涉及客户端和服务器端的通信的这一块知识的应用,发现自己还不是那么的熟悉这一块,鼓捣了半天,因此就想通过此篇博文来记录一下,也希望能够给更对的朋友们一点帮助



废话不多说,直接上代码

客户端的代码如下

package org.wrh.socketserver;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class MyClient {

    public static void main(String[] args) throws Exception {
        //第一步:创建客户端Socket
        Socket s=new Socket("192.168.1.107",4567);
        //第二步:读取向服务器端发送的数据文件
        FileInputStream fis=new FileInputStream("d:\\100.txt");
        //第三步:获取Socket输出流
        OutputStream os=s.getOutputStream();

        byte[] buf=new byte[1024];
        int len;
        while((len=fis.read(buf))!=-1){
            os.write(buf, 0, len);

        }
        //刷新一下缓冲区的数据
        os.flush();
        //告诉服务器,我的数据已经发送完了
        s.shutdownOutput();

        //将服务器返回的数据读取出来
        InputStream is=s.getInputStream();
        byte[] buf_in=new byte[1024];
        int len_in=is.read(buf_in);
        System.out.println(new String(buf_in,0,len_in));

        fis.close();
        os.close();
        is.close();
        s.close();

    }

}


服务器端的代码如下

package org.wrh.socketserver;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {

    public static void main(String[] args) throws Exception {
        //第一步:建立服务器端Socket
        ServerSocket ss=new ServerSocket(4567);
        //第二步:获取客户端
        Socket socket=ss.accept();
        /*
         * 获取客户端的ip地址
         * */
        String ip=socket.getInetAddress().getHostAddress();
        System.out.println(ip+"....connected");
        //第三步:获取Socket的输入流,对客户端发送来的数据进行读取
        InputStream is=socket.getInputStream();

        /*
         *读取数据,并 将数据写入到文件中
         * */
        File dir=new File("d:\\wu");
        if(!dir.exists()){
            dir.mkdirs();

        }
        File file=new File(dir,ip+".txt");
        FileOutputStream fos=new FileOutputStream(file);

        byte[] buf=new byte[1024];
        int len=0;
        while((len=is.read(buf))!=-1){
            fos.write(buf, 0, len);

        }
        fos.flush();

        //给客户端一个反馈信息
        OutputStream os=socket.getOutputStream();
        os.write("收到数据".getBytes());

        //下面为关闭各种要关闭的资源
        fos.close();
        is.close();
        os.close();
        socket.close();
        ss.close();

    }

}


上面的代码的注释写的比较详细,这里就不在解释

总结


这里要提醒大家的是,虽然上面的代码的流程很简单,但是如果大家不动手敲代码的话,是不太容易熟练掌握的,就像以前的我一样以为自己掌握了,最后当自己要应用的时候发现还是没有掌握



总之:动手实践动手实践动手实践动手实践,重要的话说四遍,说四遍,哈哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: