网络通信入门笔记

如何建立一个客户端和服务端

客户端

开启服务器

public class MsgServer {
	public static void main(String args[]) throws IOException{
		ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器开启:ip:"+serverSocket.getInetAddress().getHostAddress()+"端口: "+serverSocket.getLocalSocketAddress());
        System.out.println("等待中");
        Socket  client = serverSocket.accept(); //监听连接

       

这段代码创建了一个serversocket对象,端口号为8888,通过IP地址+端口能够唯一地确定一个程序,需要注意的是端口一般为5000+,否则可能与现有端口冲突
为了防止冲突,需要监听与客户端的连接

通过管道传输文本

		InputStream inputStream = client.getInputStream();
        OutputStream outputStream = client.getOutputStream();

        //发送消息
        String msg = "已连接到服务器";
        byte[] msgBytes = msg.getBytes();
        //发送消息长度
        outputStream.write(msgBytes.length);
        //发送消息内容
        outputStream.write(msgBytes);
        outputStream.flush(); //刷新缓冲    管道强制刷出
        while (inputStream.read() != -1)
        {
            System.out.println((char)inputStream.read());

        }

这段代码创建了服务端的输入和输出,管道的特点是上一步处理的结果作为下一步处理的输入,可以通过管道来发送信息
由于网络通信是通过字节码传输的,所以文字信息也要转换成字节码,并且避免使用中文符号
发送消息后刷新缓冲区,防止错误
while循环用于接收,显示客户端发送的消息

客户端

建立客户端

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1",8888); //端口和IP地址为服务器的地址
        }
       }

读取消息

// 输入输出流对象
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();

        //传入地址,构造字节数组
        int msglength = inputStream.read();
        byte[] msgBytes = new byte[120];
        //读入
        inputStream.read(msgBytes);
        String getmsg = new String(msgBytes);
        System.out.println("来自服务器的消息:"+"长度为:"+msglength+" "+getmsg);

字节数组需要事先指定大小,并且占用一定资源,因此需要合理设置
输入输出与服务器大致相同,同样适用于管道模型

相关知识

发送文字需要将字符串变为一个或多个字节码,接受文字则需要将字节码合并为字符串
在收发过程中采用的编码通常为Unicode,一个字节表示一个字
用于发送中文等其他文字时,可能采用1~6个字节,使用UTF-8编码,中文为3个字节,2个字节存储信息,一个字节判断是否为中文

网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等,通常分为TCP和UDP两种
TCP是面向连接的,稳定的协议
UDP是数据报的形式,需要固定频段发送,需要接收者实时接收
TCP的握手协议分三步
1.服务端监听,客户端发送请求
2.服务端收到请求并应答,客户端收到应答,发送应答包
3.服务端收到应答

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值