JAVA线程与简单会话

tech2023-07-08  103

###线程(Tread)

cpu---同一时候只能处理一个事情; 中断响应---中止当前进程,进行优先级更高的进程; 阻塞---io事件的输入与输出 多线程---最大程度利用cpu时间片; implements(实线) InterruptedException(接口)---规定了必须实现的方法 String[] a = b.split("\r\n")---字符串拆分 Thread.sleep(3000);---3秒等待时间 static class Thread.State 线程状态。 public class serverDemo implements Runnable---组方法+implements Runnable

线程使用方法(Tread)

package com.mtlk.会话; public class 线程操作 implements Runnable{ private final String mes; //不可修改的私有全局变量 public 线程操作(String mes){ this.mes = mes; //定义一个全局变量 } public static void main(String[] args)throws InterruptedException { //主方法,使用多线程 线程操作 ta = new 线程方法("this is Thread_A"); //线程一 new Thread(ta).start(); 线程操作 td = new 线程方法("this is Thread_B"); //线程二 new Thread(td).start(); } @Override public void run() { for (int i=0;i<10;i++){ //循环规则 System.out.println(Thread.currentThread().getName()); //打印当前线程 System.out.println(mes); //同时输出两个线程到控制台 try { Thread.sleep(3000); //每次输出相隔3秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }

PrintWrite

void println(String x) 打印 String,然后终止该行。 PrintWriter(Writer out) 创建不带自动行刷新的新 PrintWriter。

###ServerSocket

ServerScoket---服务器 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。 socket() 通过系统默认类型的 SocketImpl 创建未连接套接字 Socket accept() 侦听并接受到此套接字的连接。 void print(String s) 打印字符串。 .hasNextLine()---判断是否有下一行 .nextLine()---扫描一行 S

server服务器端

package com.mtlk.会话; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class server implements Runnable{ private ServerSocket ss; //设置全局变量 private Socket s; public server() throws IOException{ //构造方法 ss = new ServerSocket(1314); //设置端口 s = ss.accept(); //侦听并接受此端口收到的消息 new Thread(this).start(); //线程状态,开启 receive(); //调用下面的方法 } private void receive() throws IOException{ Scanner sc = new Scanner(System.in); //输入到文本框的内容 PrintWriter pw = new PrintWriter(s.getOutputStream()); //端口接收的内容做高级封装 while (true){ //开启循环 String mes = sc.next(); //控制台输入的内容转化为字符串 if (mes.equalsIgnoreCase("end")){ //控制输入end System.out.println("退出会话"); //如果输入end那么控制台输出退出会话 return; //退出此次会话 }else { pw.println(mes); //将控制台内容输出 pw.flush(); //输出 } } } @Override public void run() { try { InputStream is = s.getInputStream(); //获取输入到端口的内容 Scanner sc = new Scanner(is); //将端口的内容输入到控制台 while (true){ if (sc.hasNextLine()) { //扫描输入内容是否有下一行 System.out.println("Client:" + sc.nextLine()); //如果有下一行那么输出到控制台 } } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws IOException { new server(); //运行整个程序 } }

client客户端

package com.mtlk.会话; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class client implements Runnable{ private Socket s; //定义全局变量 public client() throws IOException { s = new Socket("127.0.0.1",8000); //设置目的ip,和端口 new Thread(this).start(); //开启线程 receive(); } private void receive() throws IOException { Scanner sc = new Scanner(System.in); //输入到控制台 PrintWriter pw = new PrintWriter(s.getOutputStream()); //获取输入到端口的消息 while(true){ String mes = sc.next(); //控制台输入内容转化为字符串 if(mes.equalsIgnoreCase("end")){ //判断输入内容是不是end System.out.println("系统退出"); //符合条件,就输出这个内容 return; } pw.println(mes); //将端口消息写入控制台 pw.flush(); //刷新 } } @Override public void run() { try { InputStream is = s.getInputStream(); //获取端口收到消息 Scanner sc = new Scanner(is); //输入到控制台 while(true){ if(sc.hasNextLine()) { //查看输入内容是否有下一行 System.out.println("Server: " + sc.nextLine()); //输出端口收到的消息 } } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws IOException { new client(); //执行程序 } }

List

List list = Arrays.asList(s)---集合框架,可扩展集合 void add(String item) 向滚动列表的末尾添加指定的项。

TCP协议单线程通信

Server package com.mtlk.会话;

import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class 服务器_1 { public static void main(String[] args) throws IOException { ServerSocket ss =new ServerSocket(9000); //创建目标端口 Socket s = ss.accept(); //获取端口收到的信息 InputStream i = s.getInputStream(); //将端口收到的信息输入 Scanner o = new Scanner(i); //将端口获取的信息输入控制台 while (o.hasNextLine()){ //扫描是否有下一行 System.out.println("客户端:"+o.nextLine()); //一行一行打印 } } }

客户端 package com.mtlk.会话;

import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class 客户端_1 { public static void main(String[] args) throws IOException { Socket socket = new Socket("127.0.0.1",9000); //目标网址,端口 // String mes = "Hello"; //要传输的内容 Scanner sa = new Scanner(System.in); String name = sa.next(); //控制台输入内容 PrintWriter pw = new PrintWriter(socket.getOutputStream()); //创建一个传输的文件 pw.print(name); //将传输的内容放入传输文件中 pw.flush(); //刷新 } }

UDP单线程通信

DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。 DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。 void receive(DatagramPacket p) 从此套接字接收数据报包。 void send(DatagramPacket p) 从此套接字发送数据报包。 byte[] getData() 返回数据缓冲区。

服务器

package com.mtlk.会话; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDP服务器 { public static void main(String[] args)throws IOException { byte[] buffer = new byte[1024]; //新建一个比特数组 DatagramSocket ds = new DatagramSocket(7000); //规定端口 DatagramPacket da = new DatagramPacket(buffer,buffer.length); //建立缓存空间和缓存长度 ds.receive(da); //将端口获取的数据存入数据缓存区 System.out.println(da.getAddress().getHostAddress()); //获取对面ip地址 System.out.println(da.getPort()); //获取对方端口号 byte[]context = da.getData(); //将缓存区数据存入比特数组 System.out.println(new String(context)); //转化为字符串输出到控制台 } }

客户端 package com.mtlk.会话;

import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDP客户端 { public static void main(String[] args)throws IOException { byte[] context = "Hello Server".getBytes(); //将输入内容转化为比特流,存入比特数组 DatagramSocket ds = new DatagramSocket(); //实例化套接字,随机端口 DatagramPacket dp = new DatagramPacket(context,context.length, InetAddress.getByName("255.255.255.255"),7000); //广播发送,设置目的端口 ds.send(dp); //随机端口发送数据包,内容为dp } }
最新回复(0)