[Java] Tcp/udp 简单通信

本文转自  我自己的博客guozeyiblog.cn 欢迎来访

效果图:

        //UDP通信

    import java.awt.*;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.io.IOException;

    import java.net.*;

    import javax.swing.*;

    class send extends JFrame implements ActionListener{

    	private JTextArea Chat; //显示框

    	private JTextField Mes; //输入框

    	DatagramSocket soc;

    	public send(){ //构造函数

    		 try {

    			 soc = new DatagramSocket();

    		} catch (SocketException e) {

    			// TODO 自动生成的 catch 块

    			e.printStackTrace();

    		}

    		GUI("客户端");

    		while(true){

    			GetMsg();

    		}

    	}

    	public static void main(String args[]){

    		new send();

    	}

    	public void GUI(String str){ //图形化界面

    		this.setTitle(str);

    		Container container = this.getContentPane();

    		JButton send = new JButton("发送");

    		JLabel msg = new JLabel("消息内容");

    		Chat = new JTextArea();

    		Mes = new JTextField(20);

    		Chat.setEditable(false);

    		JScrollPane contain = new JScrollPane(); //滚动框

            contain.setViewportView(Chat);

            container.setLayout(new BorderLayout()); //设置布局方式

            container.add(contain,BorderLayout.CENTER);

            JPanel botton = new JPanel();

            Mes.addActionListener(this);

            send.addActionListener(this); //绑定监听

            botton.add(msg);

            botton.add(Mes);

            botton.add(send);

            container.add(botton,BorderLayout.SOUTH);

            this.show(true);

            this.setSize(600, 400);

    	}

    	//与Button绑定的方法

    	public void actionPerformed(ActionEvent e) {

    	  String str = Mes.getText();  //取得文本域的内容

    	  if(str.equals("")){

    		  Chat.append("提示:消息不可以为空!!!\n");

    	  }else{

    		  Chat.append("我说:"+str+"\n");

    		  //UDP发包

    		  SendMsg(str);

    	  }

    	  Mes.setText("");

    	}

    	//发包

    	public void SendMsg(String str){

    		try {

    			DatagramPacket packet = new DatagramPacket(str.getBytes(),str.getBytes().length, 

    					InetAddress.getByName("127.0.0.1"),11190);		   

    		    soc.send(packet);

    		} catch (Exception e) {

    			// TODO 自动生成的 catch 块

    			e.printStackTrace();

    		}		

    	}

    	//接收

    	public void GetMsg(){

    		byte data[]= new byte[1024];

    		DatagramPacket packet = new DatagramPacket(data,data.length);

    		try {

    		    //DatagramSocket soc = new DatagramSocket();		

    			soc.receive(packet);

    		} catch (IOException e) {

    			// TODO 自动生成的 catch 块

    			e.printStackTrace();

    		}

    		Chat.append("服务:"+new String(packet.getData(),0,packet.getData().length)+"\n");

    	}

    }

        //UDP通信

    import java.awt.*;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.io.IOException;

    import java.net.*;

    import javax.swing.*;

    class recevice extends JFrame implements ActionListener{

    	private JTextArea Chat; //显示框

    	private JTextField Mes; //输入框

    	DatagramSocket soc;

    	InetAddress adr;

    	int port;

    	public recevice(){ //构造函数

    		try {

    			soc = new DatagramSocket(11190);

    		} catch (SocketException e) {

    			// TODO 自动生成的 catch 块

    			e.printStackTrace();

    		}	

    		GUI("服务端");

    		while(true){

    			GetMsg();

    		}

    	}

    	public static void main(String args[]){

    		new recevice();

    	}

    	public void GUI(String str){ //图形化界面

    		this.setTitle(str);

    		Container container = this.getContentPane();

    		JButton send = new JButton("发送");

    		JLabel msg = new JLabel("消息内容");

    		Chat = new JTextArea();

    		Mes = new JTextField(20);

    		Chat.setEditable(false);

    		JScrollPane contain = new JScrollPane(); //滚动框

            contain.setViewportView(Chat);

            container.setLayout(new BorderLayout()); //设置布局方式

            container.add(contain,BorderLayout.CENTER);

            JPanel botton = new JPanel();

            Mes.addActionListener(this);

            send.addActionListener(this); //绑定监听

            botton.add(msg);

            botton.add(Mes);

            botton.add(send);

            container.add(botton,BorderLayout.SOUTH);

            this.show(true);

            this.setSize(600, 400);

    	}

    	//与Button绑定的方法

    	public void actionPerformed(ActionEvent e) {

    	  String str = Mes.getText();  //取得文本域的内容

    	  if(str.equals("")){

    		  Chat.append("提示:消息不可以为空!!!\n");

    	  }else{

    		  Chat.append("我说:"+str+"\n");

    		  //UDP发包

    		  SendMsg(str);

    	  }

    	  Mes.setText("");

    	}

    	//发包

    	public void SendMsg(String str){

    		try {

    			DatagramPacket packet = new DatagramPacket(str.getBytes(),str.getBytes().length,adr,port);

    		    //DatagramSocket soc = new DatagramSocket();

    		    soc.send(packet);

    		} catch (Exception e) {

    			// TODO 自动生成的 catch 块

    			e.printStackTrace();

    		}		

    	}

    	//接收

    	public void GetMsg(){

    		byte data[]= new byte[1024];

    		DatagramPacket packet = new DatagramPacket(data,1024);

    		try {		    	

    			soc.receive(packet);

    			adr=packet.getAddress();

    			port=packet.getPort();

    		} catch (IOException e) {

    			// TODO 自动生成的 catch 块

    			e.printStackTrace();

    		}

    		Chat.append("客户:"+new String(packet.getData(),0,packet.getData().length)+"\n");

    	}

    }

    -----------------------------------------------------------------------------------------------------------------------------------------

    //tcp实现

        <服务端>

    import java.awt.BorderLayout;

    import java.awt.Container;

    import java.awt.event.ActionEvent;

    import java.io.DataInputStream;

    import java.io.DataOutputStream;

    import java.io.IOException;

    import java.net.ServerSocket;

    import java.net.Socket;

    import javax.swing.Action;

    import javax.swing.JButton;

    import javax.swing.JFrame;

    import javax.swing.JLabel;

    import javax.swing.JPanel;

    import javax.swing.JScrollPane;

    import javax.swing.JTextArea;

    import javax.swing.JTextField;

    public class getmsg extends JFrame implements Action{

    	private JTextArea Chat ;

    	private JTextField sms ;

    	private ServerSocket serverSocket ;

    	private Socket socket;

    	DataInputStream in;

    	public static void main(String[] args) {

    		new getmsg();

    	}

    	public getmsg() {

           GUI("服务端");

           try {

    			serverSocket = new ServerSocket(20000);

    		} catch (IOException e1) {

    			// TODO Auto-generated catch block

    			e1.printStackTrace();

    		}

           try {

        	  socket = new Socket();

        	  socket = serverSocket.accept();

    		in = new DataInputStream(socket.getInputStream());

    	} catch (IOException e) {

    		// TODO Auto-generated catch block

    		e.printStackTrace();

    	}

          new getmes().start();

    	}

    	/**

    	 * 获取消息线程

    	 */

    	class getmes extends Thread{

    		@Override

    		public void run() {

    			super.run();

    			while(true){

    				try {

    					  Chat.append("对方: >"+in.readUTF()+"\n");

    					  //in.close();

    				} catch (Exception e) {

    					// TODO Auto-generated catch block

    					e.printStackTrace();

    				}

    		}

    	}

    	}

    	/**

    	 * 发送消息线程

    	 */

    	class sendmes extends Thread{

    		@Override

    		public void run() {

    			super.run();

    			System.out.println("发送线程");

    			DataOutputStream out;

    			try {

    				out = new DataOutputStream(socket.getOutputStream());

    				//System.out.println(">>>>"+socket.isClosed());

    				//System.out.println(">>>>"+sms.getText().trim());

    				out.writeUTF(sms.getText().trim());

    				//out.close();

    				Chat.append("我: >"+sms.getText().trim()+"\n");

    				sms.setText("");

    			} catch (IOException e) {

    				// TODO Auto-generated catch block

    				e.printStackTrace();

    			}

    		}

    	}

    	public void GUI(String title){

    		this.setTitle(title);

    		Container container = this.getContentPane();

    		Chat = new JTextArea(); //内容显示框

    		JScrollPane center = new JScrollPane(); //滚动版

    		sms = new JTextField(20);

    		JButton send = new JButton("发送");

    		JLabel mes = new JLabel("输入消息:");

    		container.setLayout(new BorderLayout());

    		center.setViewportView(Chat);

    		Chat.setEditable(false);

    		container.add(center);

    		JPanel bottom = new JPanel();

    		bottom.add(mes);

    		bottom.add(sms);

    		bottom.add(send);

    		container.add(bottom,BorderLayout.SOUTH);		

    		this.setSize(600, 400);

    		this.show(true);		

    		send.addActionListener(this); //设置监听

    	}

    	@Override

    	public void actionPerformed(ActionEvent e) {

    		// TODO Auto-generated method stub

    		new sendmes().start();

    		System.out.println(socket.isClosed());

    	}

    	@Override

    	public Object getValue(String key) {

    		// TODO Auto-generated method stub

    		return null;

    	}

    	@Override

    	public void putValue(String key, Object value) {

    		// TODO Auto-generated method stub

    	}

    }

        <客户端>

    import java.awt.BorderLayout;

    import java.awt.Container;

    import java.awt.event.ActionEvent;

    import java.io.DataInputStream;

    import java.io.DataOutputStream;

    import java.io.IOException;

    import java.net.ServerSocket;

    import java.net.Socket;

    import java.net.UnknownHostException;

    import javax.swing.Action;

    import javax.swing.JButton;

    import javax.swing.JFrame;

    import javax.swing.JLabel;

    import javax.swing.JPanel;

    import javax.swing.JScrollPane;

    import javax.swing.JTextArea;

    import javax.swing.JTextField;

    public class send extends JFrame implements Action{

    	private JTextArea Chat ;

    	private JTextField sms ;

    	private Socket socket;

    	private DataOutputStream out;

    	private DataInputStream  in;

    	public static void main(String[] args) {

    		new send();

    	}

    	public send() {

    		GUI("客户端");

    		try {

    			socket = new Socket("192.168.56.1", 20000);

    			in= new DataInputStream(socket.getInputStream());

    		} catch (UnknownHostException e) {

    			// TODO Auto-generated catch block

    			e.printStackTrace();

    		} catch (IOException e) {

    			// TODO Auto-generated catch block

    			e.printStackTrace();

    		}

    		//开启新线程

    		new rec().start();

    	}

    	/**

    	 * 接收线程

    	 */

    	class rec extends Thread{

    		@Override

    		public void run() {

    			super.run();

    			while(true){

    			try{

    		  Chat.append("对方: >"+in.readUTF()+"\n");

    		}catch(Exception exception){}

    			}

    	}

    	}

    	/**

    	 * 发送线程

    	 */

    	class sendmsg extends Thread{

    		@Override

    		public void run() {

    			super.run();

    			try {	

    				System.out.println(">>>>"+socket.getPort()+">>"+socket.getLocalAddress().toString());

    				out = new DataOutputStream(socket.getOutputStream());

    				out.writeUTF(sms.getText().trim());

    				//out.close();

    				Chat.append("我: >"+sms.getText().trim()+"\n");

    				sms.setText("");

    			} catch (IOException e) {

    				// TODO Auto-generated catch block

    				e.printStackTrace();

    			}

    		}

    	}

    	/**

    	 * 图形端

    	 */

    	public void GUI(String title){

    		this.setTitle(title);

    		Container container = this.getContentPane();

    		Chat = new JTextArea(); //内容显示框

    		JScrollPane center = new JScrollPane(); //滚动版

    		sms = new JTextField(20);

    		JButton send = new JButton("发送");

    		JLabel mes = new JLabel("输入消息:");

    		container.setLayout(new BorderLayout());

    		center.setViewportView(Chat);

    		Chat.setEditable(false);

    		container.add(center);

    		JPanel bottom = new JPanel();

    		bottom.add(mes);

    		bottom.add(sms);

    		bottom.add(send);

    		container.add(bottom,BorderLayout.SOUTH);		

    		this.setSize(600, 400);

    		this.show(true);		

    		send.addActionListener(this); //设置监听

    	}

    	@Override

    	public void actionPerformed(ActionEvent e) {

    		// TODO Auto-generated method stub

    		System.out.println("Onclick");

    		new sendmsg().start(); //发送信息启动新线程

    	}

    	@Override

    	public Object getValue(String key) {

    		// TODO Auto-generated method stub

    		return null;

    	}

    	@Override

    	public void putValue(String key, Object value) {

    		// TODO Auto-generated method stub

    	}

    }

[Java] Tcp/udp 简单通信

时间: 2024-10-30 10:46:53

[Java] Tcp/udp 简单通信的相关文章

Java TCP/UDP socket 编程流程总结

最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就像通过一个文件的file handler就可以都写数据到存储设备上一样.根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的. 对socket的本身组成倒是比较好理解.既然是应用通过socket通信,肯定就有一个服务器端和一个客户端.

高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2

HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-S

高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1 发布

HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-S

Windows socket c++ TCP UDP 简单客户端 vs2013

socket 主要是网络中进程之间的通信,起源于Unix,而"一切皆可文件"的思想一样可以用在socket上,即 打开 -> 读写 -> 关闭. int socket(int domain, int type, int protocol):(服务端 & 客户端) socket函数对应于普通文件的打开操作.普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket. 这个so

TCP和UDP并实现socket的简单通信

一.TCP和UDP的区别和联系 1.五层协议体系结构和OSI七层的体系结构 2.五层协议体系结构 2.1应用层(超文本传输协议)(文件传输)(远程登录)(网络管理)(域名系统)HTTP/TFTP/TELNET/SNMP/DNS 如何通过应用进程间的交互来完成特定网络应用,是应用进程间的通信和交互规则. 2.2运输层 负责向两台主机之间提供通用的数据传输服务,应用层利用这一层的传输服务,传输应用层的报文. 2.3网络层(Internet协议)(控制信息协议)(地址/反地址解析协议)IP/ICMP/

高性能 TCP &amp; UDP 通信框架 HP-Socket v3.5.1 正式发布

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握

高性能 TCP &amp; UDP 通信框架 HP-Socket v3.2.2 正式发布

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握

高性能 TCP &amp; UDP 通信框架 HP-Socket v3.3.1 正式发布

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架

???HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中.????为了让使用者能方便快速地学习和使用 HP-Socket