0726swing、lambda、socket通讯

本文深入探讨了Swing图形用户界面编程,展示了如何创建窗口应用和处理控件事件。同时,详细介绍了UDP与TCP/IP协议的Socket编程,包括客户端与服务端的通信原理及实践代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swing (c/s窗口应用)

JFrame f = new JFrame();
	f.setSize(600, 500);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	//f.setLocation(200, 200);
	f.setLocationRelativeTo(null);
    //f.setLayout(manager);//设置布局
	//f.add(comp);//放入控件
	//f.setJMenuBar(menubar);//放入菜单
   	f.setVisible(true);



	public class MyFrame extends JFrame{
	public MyFrame() {
		setSize(600, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);
	}
}

控件:可视部件全部以大写字母J打头
控件全部继承自Jcomponent(可视区域)
不使用布局管理器:

setLayout(null);//布局管理器 默认borderlayout
JButton bt = new JButton("江湖if哦我IE");
bt.setSize(100,50);//setPreferredSize(preferredSize); 布局管理器使用
add(bt);

控件事件:(add打头 listener结尾的方法,事件监听器)

bt.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			System.out.println("fewf");
		}
	});

lambda 1.8java 新特性

lambda是函数式接口实现的便捷方法(替代函数式接口的内部匿名类)

interface1 a = ()->{System.out.println("aaa");};//lambda
interface1 b = new interface1() {
	public void add() {
		System.out.println("实现1");
	}
};

函数式接口(只有一个抽象方法)

@FunctionalInterface
public interface interface1 {
	public int add(int a,int b);
}

list.forEach((a)->{
			System.out.println(a);
		});

lambda核心:
1、只支持@FunctionalInterface 处理
2、做接口实例化的一种方式
3、返回值为接口对象 (根据接口对象的方法 )

socket通讯(套接字——IP地址+端口号)

UDP协议(对等网,包传输,不稳定,不安全,主要用于即时数据处理和局域网处理)
邮局寄信

sock=new DatagramSocket(port);
sock.send(pack);  //发送
new Thread(this).start();
sock.receive(p);

具体代码:

UDPsend.java
public class UDPSend {
public static void main(String[] args) throws Exception {
	DatagramSocket sock = new DatagramSocket();//自身端口
	byte[] data = "你好".getBytes();
	DatagramPacket pack = new DatagramPacket(data, data.length,
	InetAddress.getByName("127.0.0.1"), 446);//目的IP 端口
	sock.send(pack);//发送
}
}

UDPreceive.java 
public class UDPReceive {
public static void main(String[] args) throws Exception{
	DatagramSocket sock = new DatagramSocket(446);//自身端口
	new Thread(()->{
		while(true) {
			DatagramPacket p = new DatagramPacket(new byte[100], 100);
			try {
				sock.receive(p);
				byte[] data = Arrays.copyOf(p.getData(), p.getLength());
				System.out.println(new String(data));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}).start();
}
}

TCP/IP(流处理,握手协议,长连接,心跳包,安全稳定的)
话务员-服务端 电话-客户端

server.java
public class server {
   public static void main(String[] args) {
	try {
		TcpServerManager  s = new TcpServerManager(12345);
		s.addNetListenner(new TcpServerManager.NetListenner() {
			
		@Override
		public void getMsg(String ip, int port, String msg) {
		
			System.out.println("服务端接收:"+msg);
		}
	});
	Scanner sc = new Scanner(System.in);
	while(true) {
		System.out.print("服务端发送:");
		String txt=sc.next();
		s.send(0,txt);
	}
	
	
} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
}
}

client.java
public class client {
    public static void main(String[] args) {

try {
	TcpClientManager c = new TcpClientManager("127.0.0.1", 12345);
	c.addNetListenner(new TcpClientManager.NetListenner() {
		
		@Override
		public void getMsg(String ip, int port, String msg) {
			System.out.println(port+"接收:"+msg);
			
		}
	});
	Scanner sc = new Scanner(System.in);
	while(true) {
		System.out.print("客户端发送:");
		String txt=sc.next();
		c.send(txt);
	}
	
} catch (Exception e) {
	e.printStackTrace();
}
}
}

TcpClientManager.java
public class TcpClientManager implements Runnable {
	private int  BufferSize=2000 ;
	private boolean isrun=true ;
	private Socket sock ;
	private NetListenner listenner;
public void addNetListenner(NetListenner listenner) {
	this.listenner = listenner;
}
public TcpClientManager(String ip,int port)throws Exception {
	sock= new Socket(ip, port);//连接服务端 
	new Thread(this).start();
}
public TcpClientManager(Socket sock)throws Exception {
	this.sock=sock;
	new Thread(this).start();
}

public void send(String msg)throws Exception {
	sock.getOutputStream().write(msg.getBytes());
}

@Override
public void run() {
	while(isrun) {
		try {
			InputStream in=sock.getInputStream();
			byte[] data=new byte[BufferSize];
			int len=in.read(data);
			data=Arrays.copyOf(data, len);
			if(listenner!=null) {
				InetSocketAddress ad=(InetSocketAddress) sock.getRemoteSocketAddress();
				listenner.getMsg(ad.getAddress().getHostAddress(), ad.getPort(), new String(data));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}		
}
public void close() {
	isrun=false;
	try {
		sock.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

public interface NetListenner{
	public void getMsg(String ip,int port,String msg);
}
}
TcpServerManager.java
public class TcpServerManager implements Runnable {
	private ServerSocket server;
	private boolean isrun=true;
	private int port;
	private Vector<TcpClientManager> clientlist=new Vector<>();
	private NetListenner listenner;
	public void addNetListenner(NetListenner listenner) {
		this.listenner = listenner;
	}
	public TcpServerManager(int port)throws Exception{
		super();
		this.port = port;
		server=new ServerSocket(port);
		new Thread(this).start();
	}
	@Override
	public void run() {
		while(isrun) {
			try {
				Socket sock=server.accept();
				TcpClientManager c=new TcpClientManager(sock);
				c.addNetListenner(act);
				clientlist.add(c);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	socket.TcpClientManager.NetListenner act=new socket.TcpClientManager.NetListenner() {
		@Override
		public void getMsg(String ip, int port, String msg) {
			if(listenner!=null)
				listenner.getMsg(ip, port, msg);
		}
	};
	public void send(int index,String msg)throws Exception {
		clientlist.get(index).send(msg);
	}
public void close() {
	isrun=false;
	try {
		server.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
	for(TcpClientManager c:clientlist) c.close();
	
}

public interface NetListenner{
	public void getMsg(String ip,int port,String msg);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值