TCP网络通信
服务端代码
package com.llm.test.demo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
//服务端: 接受信息,响应信息
public static void main(String[] args) throws IOException {
System.out.println("服务端启动了....");
ServerSocket serverSocket = new ServerSocket(8080);
//accept() 等待客户端发送信息,如果没有接收到,就一直阻塞线程
Socket accept = serverSocket.accept();
InputStream in = accept.getInputStream();
OutputStream out = accept.getOutputStream();
Scanner sc = new Scanner(System.in);
while (true){
byte[] bs = new byte[1024];
int num = in.read(bs);
String str = new String(bs, 0, num);
System.out.println("客户端发送过来的信息是:"+str);
// 后发送
System.out.println("请输入给客户端的回复:");
//要回复的话直接往得到的socket的输出流里面输出数据就行
String str2 = sc.next();
if ("exit".equals(str)){
System.out.println("我要走了,客户端");
break;
}
out.write(str2.getBytes());
out.flush();
}
}
}
客户端代码
package com.llm.test.demo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Client {
//客户端: 接受信息,发送信息
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 8080);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
// 先发送
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入要发送给服务端的信息");
String str = sc.next();
if ("exit".equals(str)){
System.out.println("我要走了,服务端");
break;
}
os.write(str.getBytes());
os.flush();
// 后接收用数据流
byte[] bs = new byte[1024];
int num = is.read(bs);
String str2 = new String(bs,0,num);
System.out.println("服务端给的回复:"+str2);
}
socket.close();
}
}
UDP网络通信
接受端
public static void main(String[] args) throws IOException {
System.out.println("接收方启动了");
// 接收方 需要设定端口号
DatagramSocket socket = new DatagramSocket(7777);
// 2. 接受 提前准备好一个空仓库
byte[] bs = new byte[1024];
DatagramPacket packet = new DatagramPacket(bs,bs.length);// 能装数据,
// 接受数据 如果一直没等到发送方的数据, receive方法阻塞 , 类似于TCP 中的 accept
socket.receive(packet);
String str = new String(packet.getData(),packet.getOffset(),packet.getLength());
System.out.println("发送方发送过来的数据:"+str);
System.out.println(packet.getAddress());
System.out.println(packet.getPort());
// 以下就是回复
DatagramPacket p = new DatagramPacket("不开心".getBytes(), 0, "不开心".getBytes().length, packet.getAddress(), packet.getPort());
socket.send(p);
//3. 关闭socket
socket.close();
}
发送端
public static void main(String[] args) throws IOException {
//快递点
DatagramSocket socket = new DatagramSocket();
//要发送的数据
String str = "开心";
//将数据打包
DatagramPacket packet = new DatagramPacket(str.getBytes(),
0,
str.getBytes().length,
InetAddress.getByName("127.0.0.1"),
7777);
// 发送
socket.send(packet);
// 以下是接受
byte[] bs = new byte[1024];
DatagramPacket p = new DatagramPacket(bs, bs.length);
socket.receive(p);
String str2 = new String(p.getData(),p.getOffset(),p.getLength());
System.out.println("接收方回复数:"+str2);
//关闭
socket.close();
}
枚举
枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。下面先来看看什么是枚举?如何定义枚举?
public enum TIMEEnum {
FIRST("上午1,2节(8:00-10:00)"),
SECOND("上午3,4节(10:00-12:00)"),
THIRD("下午1,2节(2:00-4:00)"),
FIRTH("下午3,4节(4:00-6:00)");
String desc;
@Override
public String toString() {
return " " +
desc +" ";
}
TIMEEnum(String desc) {
this.desc = desc;
}
}
相当简洁,在定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。枚举类型Day中分别定义了从周一到周日的值,这里要注意,值一般是大写的字母,多个值之间以逗号分隔。同时我们应该知道的是枚举类型可以像类(class)类型一样,定义为一个单独的文件,当然也可以定义在其他类内部,更重要的是枚举常量在类型安全性和便捷性都很有保证,如果出现类型问题编译器也会提示我们改进,但务必记住枚举表示的类型其取值是必须有限的,也就是说每个值都是可以枚举出来的,比如上述描述的一周共有七天。那么该如何使用呢?如下:
public class EnumDemo {
public static void main(String[] args){
//直接引用
Day day =Day.MONDAY;
}
}
//定义枚举类型
enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
就像上述代码那样,直接引用枚举的值即可,这便是枚举类型的最简单模型。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/202480.html