java---有趣的网络编程

Socket编程

Socket和操作系统有关。使用tcp/ip协议进行编程。UDP协议。TCP为可靠交换协议,UDP为不可靠交换协议,如果有兴趣的同学可以百度一下,这里的重点不是网络。

IP 地址:ipv4 ipv6,ff:ff:ff:ff 202.102.134.68,一个 ip 地址唯一的标识了一个连网终端。

端口:一台主机 host,端口有 65536 个,其中前1024个端口分配给系统使用,比较固定,专用。1024之外的端口可以由应用程序去使用。

一个ip地址加一个端口,就唯一的确定了一个应用通讯终端。

通讯的时候,使用报文进行传输。网络的七层通信模型。协议也是规范,也是标准。

好了,了解了这些网络知识,开始进入正题。

java实现发送端和接收端

接收端

package com.situ.chapter5;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class SocketMain {

    public static void main(String[] args) {
	System.out.println("等待发送端连接!");
	try(ServerSocket ss = new ServerSocket(44444);
		Socket socket = ss.accept();
		InputStream is = socket.getInputStream();
		BufferedInputStream bis = new BufferedInputStream(is);) {
	    //放在try()里面用完自动关闭,jdk1.7以上的版本才支持,消减异常地狱
	    byte[] b = new byte[4096];//
	    List<Byte> all = new ArrayList<>();//储存接收到的字节
	    while(true) {
		int len = bis.read(b);
		if(len<=0) {
		    break;
		}
		for(int i = 0;i<len;i++) {
		    all.add(b[i]);
		}
	    }
	    
	    byte[] total = new byte[all.size()];
	    for(int i = 0;i<all.size();i++) {
		total[i]=all.get(i);
	    }
	    
	    String str = new String(total,0,all.size(),"utf-8");
	    System.out.println("接收到的数据:"+str);
	    
	    
	} catch (IOException e) {
	    
	    e.printStackTrace();
	}
    }

}

发送端

package com.situ.chapter5;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class SocketClient {

    public static void main(String[] args) { 
	String host = "192.168.110.127";//接收端ip
	OutputStream os =null;
	BufferedOutputStream bos =null;
	Socket socket = null;
	try {
	   socket = new Socket(host,4444);
	   os = socket.getOutputStream();
	   bos = new BufferedOutputStream(os);
	   String hello ="张三";
	   bos.write(hello.getBytes("utf-8"));
	   System.out.println("发送成功!");
	} catch (Exception e) {
	    
	    e.printStackTrace();
	}finally {
	    try {
		socket.close();
		os.close();
		bos.close();
	    } catch (IOException e) {
		
		e.printStackTrace();
	    }
	}
    }

}

这里需要两台电脑的配合,一台执行发送端代码,一台执行接收端代码,这里不便于演示!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A little sea pig

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

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

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

打赏作者

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

抵扣说明:

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

余额充值