游戏股票实时对战等等需要计算机与计算机通信的场景
B/S C/S
点击此处查看两种架构的优缺点https://zhuanlan.zhihu.com/p/144731217
设备在网络中的唯一标识
internet protocol
internet protocol version4 互联网通信协议第四版
v4不够用了 2019年11.26日已经全部分配完毕
internet protocol version6 互联网通信协议第六版
localhost 127.0.0.1 本机IP
win+r 输入cmd
应用程序在网络中的唯一标识
数据在网络中传输的规则与约定 如 http udp tcp
目前用的是tcp/ip模型
经常用于网络会议 在线视频 丢失一些数据不影响
下载软件 文字聊天 等不能丢失数据的情况
import java.net.InetAddress;
import java.net.UnknownHostException;
public class myip {
public static void main(String[] args) throws UnknownHostException {
InetAddress name = InetAddress.getByName("198.44.173.98");
String hostName = name.getHostName();
System.out.println(hostName);
/*Inetaddress下的方法 可以自己去尝试 可以获取IP啥的*/
System.out.println(name);
}
}
import java.io.IOException;
import java.net.*;
public class uudp {
public static void main(String[] args) throws IOException {
/*
* 下面先准备好要用到信息
* */
String mss="你好你好";
byte[] b1=mss.getBytes();
InetAddress ip=InetAddress.getByName("127.0.0.1");
int port =10086;
/*
* 准备打包数据
* */
DatagramPacket dp=new DatagramPacket(b1,b1.length,ip,port);
//打包完毕之后
DatagramSocket ds=new DatagramSocket();
ds.send(dp);
ds.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class uudpjieshou {
public static void main(String[] args) throws IOException {
/*
*
* 创建接收器
* */
DatagramSocket ds=new DatagramSocket(10086);
//设置接收端口
byte[] b1=new byte[15];
DatagramPacket dp=new DatagramPacket(b1,b1.length);
ds.receive(dp);
/*接受数据 并且放入 dp中打包*/
InetAddress ip = dp.getAddress();
/*分别获取IP地址以及端口
* */
byte[]b2=dp.getData();
int len=b2.length;
int port =dp.getPort();
//打印出来数据 里面用到String的数据转换 必须先运行接收端口 才能运行发送端 否则无法运行
System.out.println("接收到"+new String(b2,0,len)+"来自于计算机"+ip+port);
}
}
简单的聊天室:
发送端口:
package connect;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class send {
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket();
Scanner sc=new Scanner(System.in);
while (true){
System.out.println("您要说的话:");
String ms=sc.next();
if ("886".equals(ms)){
break;
}
byte []b1=ms.getBytes();
InetAddress ip=InetAddress.getByName("127.0.0.1");
int port=1001;
DatagramPacket dp=new DatagramPacket(b1,b1.length,ip,port);
ds.send(dp);
}
ds.close();
}
}
接收端口:
package connect;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class over {
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(1001);
byte[]m=new byte[1024];
DatagramPacket dp=new DatagramPacket(m,m.length);
while (true) {
ds.receive(dp);
byte[]b2=dp.getData();
InetAddress ip=dp.getAddress();
int port=dp.getPort();
System.out.println("---"+new String(b2,0,b2.length)+"---"+"来自于"+ip+"端口"+port);
}
}
}
结果:
就是上面的例子都是单播
只是需要切换一下发送的方式 创建MulticastSocket 指定端口
以及在接收时 把本机IP加入到组播地址里
其他操作与上面的聊天室的例子一模一样
例子看下图
只需要将发送端的 IP 地址切换为255.255.255.255 就会发送到局域网所有的电脑
服务器端
package tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(1000);
//服务器端口打开连接
Socket s=ss.accept();
//监听
InputStream is=s.getInputStream();
//获取输入流
InputStreamReader isr=new InputStreamReader(is);
//利用转换流 转换成字符流
//同时也处理了中文乱码的问题
//也可以多加一个缓冲流 这里不理解可以看我关于Javaio流的文章
int b;
while ((b=isr.read())!=-1){
System.out.println((char)b);
}
//循环完毕后 释放资源
ss.close();
s.close();
is.close();
}
}
客户机端
package tcp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class custmer {
public static void main(String[] args) throws IOException {
Socket s=new Socket("127.0.0.1",1000);
//连接到服务器 以及端口
OutputStream os=s.getOutputStream();
//创建输出流
os.write("你好你好".getBytes());
//发送数据到服务器
os.close();
s.close();
//释放资源
}
}
确保连接建立
确保连接断开
到此基本就完成了Java网络编程
如果帮到您 麻烦您给个关注留言哈哈