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

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();



    }

}

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

总结

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

总之:动手实践动手实践动手实践动手实践,重要的话说四遍,说四遍,哈哈哈

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值