TCP通信 -- 接收并反馈(全)

TCP通信整体过程:

    1.【服务端】启动,创建ServerSocket对象,等待连接。
    2.【客户端】启动,创建Socket对象,请求连接。
    3.【服务端】接收连接,调用accept方法,并返回一个Socket对象。
    4.【客户端】Socket对象,获取OutputStream,向服务端写出数据。
    5.【服务端】Scoket对象,获取InputStream,读取客户端发送的数据。

 客户端(发送数据)

 1.创建Socket通信管道     
 2.获取IO流对象(输出)   
 3.写数据              
 4.释放资源   
Socket socket = new Socket("IP地址",端口号);
OutputStream os = socket.getOutputStream();
os.write("需要写入的数据"); //可以进行流的增强
os.close();

服务端(接收数据)

 1.创建ServerScoket通信管道  
 2.连接客户端Socket对象(监听方法)     
 3.获取IO流对象(输入)       
 4.读数据                  
 5.释放资源    
ServerSocket ss = new ServerSocket(端口号);
Socket socket = ss.accept();
InputStream is = socket.getInputStream();
int ch = is.read(); //可以进行流的增强
is.close();

 

记住就只有俩个点:建立通信管道获取输入输出流 + 同时写接收数据(易)和传输数据(涉及到键盘输入)

客户端代码:

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

/*
TCP通信 --2接收并反馈
* */
public class Client {
    public static void main(String[] args) throws IOException {
        System.out.println("===客户端启动===");
        //1、创建Socket通信管道 并连接至服务端
        Socket socket = new Socket(InetAddress.getLocalHost(),9999);

        //2、通过Socket管道 获得一个字节输出流
        OutputStream os = socket.getOutputStream();
        PrintStream ps = new PrintStream(os);//打印字节流就要将字节流os传参
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入信息:");
            String msg = sc.nextLine();
            ps.println(msg);
            ps.flush();

            //接收服务端反馈
            BufferedReader bfr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String Msg = bfr.readLine();
            System.out.println("服务端返回信息:" + Msg);

        }


    }
}

服务端

package com.itheima.b02TCPTest2;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    public static void main(String[] args) throws IOException {
        System.out.println("===服务端启动===");
        //1、创建serversocket对象
        ServerSocket ss = new ServerSocket(9999);

        //2、通过socket通信管道 将监听信息返回
        Socket socket = ss.accept();

        //3、接收信息 收到的字节流 转换为字符流 再加上缓冲流
        BufferedReader bfr = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //readLine 缓冲流读取的方法
        String msg;
        while((msg = bfr.readLine()) != null){
            System.out.println(socket.getRemoteSocketAddress() + "发送信息:" + msg);

            //服务端返回信息
            System.out.println("请输入你想回复的信息:");
            OutputStream os = socket.getOutputStream();

            PrintStream ps = new PrintStream(os);
            Scanner sc = new Scanner(System.in);
            ps.println(sc.nextLine());
            ps.flush();
        }
        
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
之前用过一个类似软件,只能用串口接收,而且速度有限,并且还很耗CPU。前不久调USB摄像头的时候自己用C++写了一个,支持串口接收网络接收JPEG图像序列。现在发出来给需要的同学,方便各位的程序调试。 串口接收功能: 串口端口无限制,自动检测电脑可用端口,波特率从9600到921600可选,默认不支持流控制和奇偶校验,8位数据位一位停止位。不需要通信协议,自动从接收的数据中判断JPG数据的起始(FFD8)结束(FFD9)标志,不包含在起始结束标志之间的数据默认为非jpg数据并显示在数据接收窗口(目前只支持文本显示,16进制暂未实现),支持接收数据量显示,帧速率显示(可能计算的不太准确),一帧JPG图像数据大小显示,图像分辨率显示。串口发送功能暂未实现。 网络接收功能: 上位机也支持通过网络接收JPG图片序列。数据接收功能和图像显示功能同串口。上位机默认作为服务器端,且暂时只支持TCP服务器,UDP未实现。目前只支持一个客户端的连接,可显示客户端的连接状态和IP。 注意: 串口接收功能和网络接收功能可同时开启,但如果同时接收数据会造成数据混乱从而导致图像显示不正常。 串口和网络的发送功能均暂未实现(暂时用不到发送功能)。 本人实测通过TCP本地回环接收TCP客户端发来的MJPG编码的1080P avi视频文件,网络速度3~5MB/s(360加速球显示),图像显示速率20~30fps,CPU(i5 750)占用25%左右,串口传输效果可以看这里链接里的视频https://pan.baidu.com/s/1jGDA9s6 软件目前还算稳定,之前测试传输了几个小时的图像也没什么问题,可能还有些小bug,欢迎反馈。 测试截图 更新一下:之前的FPS计算是说明:基于两帧图像的时间间隔计算,跳动比较大,不易观察,现在改为1s更新一次,数据更稳定。有MJPG网络视频传输需求的同学可以试试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能吧够

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值