Java中使用Socket和ServerSocket/或者说使用TCP传输数据

TCP传输数据流程图

在这里插入图片描述

客户端类/Client

步骤:
1、先创建键盘录入对象
2、new 一个Socket对象,传入服务器端的ip地址和端口号(这个端口号要和服务器的端口号一致)
3、获取输出流对象,想服务器写数据
4、使用While循环语句做到多次输入,直到输入"886"字符串,跳出whlie循环,停止输入
5、获取键盘输入内容
6、将输入内容的字节流写入字节输出流对象

服务器端类/Server

步骤:
1、创建一个ServerSocket对象,将端口号传进去
2、监听客户端的连接
3、使用while循环多次接受数据
4、获取Date对象,使用SimpleDateFormat改变输出格式
5、获取通道中的输入流对象
6、创建字节数组对象,使用字节输入流对象,读取字节数组,返回字符数组长度
7、将传输数据转换为字符串类型
8、获取客户端主机内容,客户端主机ip地址
9、输出数据时间,ip地址,客户端主机名和数据

代码

Client

import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        Socket s = new Socket("192.168.7.9", 45678);
        OutputStream os = s.getOutputStream();
        while(true){
            String next = sc.next();
            if("886".equals(next)){
                break;
            }
            os.write(next.getBytes());
        }
    }
}

Server

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Server {
    public static void main(String[] args) throws Exception{
        ServerSocket ss = new ServerSocket(45678);

        Socket s = ss.accept();

        InputStream is = s.getInputStream();
        while(true){
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("    yyyy-MM-dd HH:mm:ss");
            String date2 = sdf.format(date);

            byte[] bytes = new byte[1024];
            int length = is.read(bytes);
            String s1 = new String(bytes, 0, length);
            String hostName = s.getInetAddress().getHostName();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(date2);
            System.out.println(ip+":"+hostName+"发送的消息为:"+s1);
        }

    }
}

代码演示

先运行服务器端

因为服务器端不先打开的话,客户端先运行无法建立连接

再运行客户端并输入数

在这里插入图片描述

观察服务器端

在这里插入图片描述

注意

1、客户端类和服务器端类都需要抛出异常
2、先运行服务器端,再运行客户端
3、在同一个局域网下都可以传输数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值