博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tcp
阅读量:6942 次
发布时间:2019-06-27

本文共 2934 字,大约阅读时间需要 9 分钟。

  • Tcp协议发送数据
    • 当使用tcp发送数据的时候 必须的有服务器端,当第一次执行客户端代码会报如下错误
      • java.net.ConnectException: Connection refused: connect 
      • 连接被拒绝
    • Socket和ServerSocket 
      • 建立客户端和服务器端 
      • 建立连接后,通过Socket中的IO流进行数据的传输 
      • 关闭socket 
      • 同样,客户端与服务器端是两个独立的应用程序。 
    • 代码实现 
      • [1]客户端代码 
        • 建立客户端的Socket服务,并明确要连接的服务器。 
        • 如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流. 
        • 通过Socket对象的方法,可以获取这两个流 
        • 通过流的对象可以对数据进行传输 
        • 如果传输数据完毕,关闭资源
public class send {    public static void main(String[] args) throws Exception {        Socket socket = new Socket(InetAddress.getByName("192.168.181.1"), 8888);        String str = "你好,南宫燚滨!";        byte[] buf = str.getBytes();        int length = buf.length;        socket.getOutputStream().write(buf);        socket.close();    }}

 

      • [2]服务器代码 
        • 建立服务器端的socket服务,需要一个端口 
        • 服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信 
        • 通过客户端的获取流对象的方法,读取数据或者写入数据 
        • 如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的
public class receive {    public static void main(String[] args) throws Exception {        ServerSocket ss = new ServerSocket(8888);        Socket socket = ss.accept();        InputStream is = socket.getInputStream();        byte[] buf = new byte[1024];        int length = 0;        while ((length = is.read(buf)) != -1) {            System.out.println(new String(buf));        }    }}

 

  • 客户端发送数据数据来自键盘录入
public class send {    public static void main(String[] args) throws Exception {        Socket socket = new Socket(InetAddress.getByName("192.168.181.1"), 8888);        Scanner scanner = new Scanner(System.in);        while (scanner.hasNext()) {            String str = scanner.nextLine();            if (str.equals("886")) {                socket.close();                return;            }            byte[] buf = str.getBytes();            int length = buf.length;            socket.getOutputStream().write(buf);        }    }}

 

  • 文件上传核心逻辑
    • 朋友圈,百度网盘 360云盘.邮箱–>上传附件 
      • 代码实现: 
      • [1]客户端代码
public class send {    public static void main(String[] args) throws Exception {        Socket socket = new Socket(InetAddress.getByName("192.168.181.1"), 9999);        FileInputStream fis = new FileInputStream("abcd.txt");        byte[] buf = new byte[1024];        int len = 0;        while ((len = fis.read(buf)) != -1) {            socket.getOutputStream().write(buf, 0, len);        }        fis.close();        socket.close();    }}

 

      • [2]服务器代码
public class receive {    public static void main(String[] args) throws Exception {        ServerSocket ss = new ServerSocket(9999);        Socket socket = ss.accept();        InputStream is = socket.getInputStream();        FileOutputStream fos = new FileOutputStream("abc.txt");        byte[] buf = new byte[1024];        int len = 0;        while ((len = is.read(buf)) != -1) {            fos.write(buf, 0, len);        }        fos.close();        ss.close();    }}

 

  • 总结 :客户端上传的是什么文件类型 服务器接收的就应该是什么格式. 
    • udp:datagramSocket DatagramPacket 
    • tcp :socket serversockete

转载于:https://www.cnblogs.com/nangongyibin/p/10183472.html

你可能感兴趣的文章
Failed to create java virtue machine(不能创建java虚拟机)
查看>>
使用SandCastle创建.Net帮助文档
查看>>
c++builder XE8 线程 Thread
查看>>
redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐...
查看>>
CMake with Win&MinGW
查看>>
C# 字符串转义和反转义
查看>>
避免3种响应式设计灾祸
查看>>
http://www.cnblogs.com/hoojo/archive/2011/06/08/2075201.html
查看>>
英語版Windows Server 2012 R2を日本語化する手順
查看>>
Oracle 存储过程异常处理
查看>>
6-tips-for-managing-property-files-with-spring--转
查看>>
到底什么是实例化
查看>>
Django 学习笔记之四 QuerySet常用方法
查看>>
图像增强系列之图像自动去暗角算法。
查看>>
那些年困扰我们的委托(C#)
查看>>
【emWin】例程十一:GIF图像显示
查看>>
WebAPI性能优化之压缩解压
查看>>
jquery获取下拉框中的循环值
查看>>
HTML5 一些有用的 APIs
查看>>
Unity获取指定资源目录下的所有文件
查看>>