网站建设的验收,wordpress配置教程,广东网站建设推荐,通讯录管理网站建设JAVA中设计网络编程模式的主要有TCP和UDP两种#xff0c;TCP是属于即时通信#xff0c;UDP是通过数据包来进行通信#xff0c;UDP当中就会牵扯到数据的解析和传送。在安全性能方面#xff0c;TCP要略胜一筹#xff0c;通信过程中不容易出现数据丢失的现象#xff0c;有一…JAVA中设计网络编程模式的主要有TCP和UDP两种TCP是属于即时通信UDP是通过数据包来进行通信UDP当中就会牵扯到数据的解析和传送。在安全性能方面TCP要略胜一筹通信过程中不容易出现数据丢失的现象有一方中断两方的通信就会结束UDP数据包传送的过程当中一方中断数据包有很大的可能丢失还有可能传来的数据包的顺序是错乱的在效率方面UDP要比TCP快的不只是一点点的问题若终端有解析数据方法的函数数据包就会源源不断的传送过来然后反馈回去。以上都是我自己的理解下面是关于TCP协议通信的两个类Server类package TCP;import java.io.*;import java.net.*;import javax.swing.*;public class Server {//服务器端的输入流static BufferedReader br;//服务器端的输出流static PrintStream ps;//服务器相关的界面组件static JTextArea text;JFrame frame;public Server(){//服务器端的界面的实例化JFrame framenew JFrame(服务器端);textnew JTextArea();JScrollPane scroll new JScrollPane(text);frame.add(scroll);frame.setVisible(true);frame.setSize(300,400);//这里设置服务器端的文本框是不可编辑的text.setEditable(false);}public static void main(String[] args) throws Exception{new Server(); //生成服务器界面//通过服务器端构造函数 ServerSocket(port) 实例化一个服务器端口ServerSocket servernew ServerSocket(2000);text.append(监听2000端口\n);//实例化一个接受服务器数据的对象Socket clientserver.accept();br new BufferedReader(new InputStreamReader(client.getInputStream()));ps new PrintStream(client.getOutputStream());String msg;//如果输入流不为空,将接受到的信息打印到相应的文本框中并反馈回收到的信息while ((msg br.readLine())!null){text.append(服务器端收到msg\n);ps.println(msg);if(msg.equals(quit)){text.append(客户端“2000”已退出\n);text.append(服务器程序将退出);break;}}ps.close();br.close();client.close();}}Client类package TCP;import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import java.net.*;public class Client implements ActionListener{//这里有两个图形界面一个是连接的frame,另一个和服务器通信的界面frame1private JFrame frame;private JLabel adress;private JLabel port;JTextField adresstext;JTextField porttext;JButton connect;private JFrame frame1;private JLabel shuru;private JPanel panel1;private JPanel panel2;private JLabel jieshou;JButton send;static JTextArea shurukuang;static TextArea jieshoukuang;//从服务端接受的数据流static BufferedReader br1;//从客户端输出的数据流static PrintStream ps;//从通信界面中的输入框接受的数据流static BufferedReader br2;static Socket client;//将输入框字符串转换为字符串流所需的字符串的输入流static ByteArrayInputStream stringInputStream ;public Client() {//连接界面的实例化framenew JFrame();adressnew JLabel(IP 地址);port new JLabel(端口号);adresstextnew JTextField(127.0.0.1,10);porttextnew JTextField(2000,10);connectnew JButton(连接);//连接界面的布局frame.setLayout(new FlowLayout());frame.add(adress);frame.add(adresstext);frame.add(port);frame.add(porttext);frame.add(connect);frame.setVisible(true);frame.setSize(200,150);connect.addActionListener(this);//通信界面的实例化frame1new JFrame();shurunew JLabel(请输入);shurukuangnew JTextArea(请输入····,5,40);panel1new JPanel();panel1.add(shuru);panel1.add(shurukuang);panel1.setLayout(new FlowLayout());sendnew JButton(发送);panel2new JPanel();jieshounew JLabel(已接受);jieshoukuangnew TextArea(8,60);jieshoukuang.setEditable(false);panel2.add(jieshou);panel2.add(jieshoukuang);panel2.setLayout(new FlowLayout());frame1.setLayout(new FlowLayout());//通信界面都的布局frame1.add(BorderLayout.NORTH,panel1);frame1.add(send);frame1.add(BorderLayout.SOUTH,panel2);//连接时通信界面是处于看不到的frame1.setVisible(false);frame1.setSize(500,350);send.addActionListener(this);}//两个界面当中都有相应的按钮时间为相应的时间添加动作public void actionPerformed(ActionEvent e) {if(e.getSource()connect){try {//当触发连接按钮时实例化一个客户端clientnew Socket(127.0.0.1,2000);//隐藏连接界面显示通信界面frame.setVisible(false);frame1.setVisible(true);jieshoukuang.append(已经连接上服务器\n);} catch (IOException e1){System.out.println(链接失败);e1.printStackTrace();}}//通信界面中的发送按钮相应的时间处理if(e.getSource()send){//将输入框中的字符串转换为字符串流stringInputStream new ByteArrayInputStream((shurukuang.getText()).getBytes());br2 new BufferedReader(new InputStreamReader(stringInputStream));String msg;try{while((msgbr2.readLine())!null){ps.println(msg); //将输入框中的内容发送给服务器端jieshoukuang.append(向服务器发送msg\n);jieshoukuang.append(客户端接受相应:br1.readLine()\n);if(msg.equals(quit)){jieshoukuang.append(客户端将退出!);br1.close();ps.close();client.close();frame1.setVisible(false);break;}}}catch(IOException e2){System.out.println(读输入框数据出错);}shurukuang.setText();}}public static void main(String[] args) throws IOException{new Client(); //实例化连接界面clientnew Socket(127.0.0.1,2000);//从服务端接受的数据br1new BufferedReader(new InputStreamReader(client.getInputStream()));//从客户端输出的数据ps new PrintStream(client.getOutputStream());}}写完这两个类以后还是有几个问题1)main 函数为什么非要用 static 来修饰2)缓冲对象 BufferedReader 为什么不能直接用于判断非要将读到的数据赋值给字符串来进行操作3)在连接界面当中的 Connect 按钮事件 当中我有实例化一个 客户端的对象但是我注释掉主函数当中 clientnew Socket(127.0.0.1,2000); 的这一句的时候就会发现抛出 NULLPOINTEXCEPTION 异常我很不理解希望有看到这文章的大牛们能不吝赐教我也正在不停的翻着《Think in java》希望在某个不起眼的角落里面发现我的答案。更多基于java TCP网络通信的实例详解相关文章请关注PHP中文网本文原创发布php中文网转载请注明出处感谢您的尊重