没接触通信编程之前,总觉得通信好神秘,不知道移动通信是如何实现了“天涯若比邻”的梦想的。接触基本的通信原理后,才从技术层面对通信有了一定的了解。
基本的通信实现需要些什么呢?首先需要一个服务器和一个客户端。通信的基本过程就是服务器和客户端的交互,服务器将要传送的文件送到服务器,服务器根据客户端的要求发送给指定的客户端,从而完成了客户端通过服务器与其它客户端通信的目的。
下面来看一个完成基本通信的一个小例子
package tongxin; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import javax.swing.JTextPane; import javax.swing.event.DocumentListener; import javax.swing.event.UndoableEditListener; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Element; import javax.swing.text.Position; import javax.swing.text.Segment; public class Client { ArrayList<ClientTread> list=new ArrayList<>(); public static void main(String[] args) { Client cilent=new Client(); cilent.setUpPort(9090); } //开启服务器端口的函数 public void setUpPort(int port){ try { ServerSocket ss=new ServerSocket(port); System.out.println("程序运行了"); while(true){ /*当有客户端访问port端口时,接收一个socket对象,这个对象相当于客户端与服务器信息交流的管道*/ Socket s=ss.accept(); System.out.println("ppp"); /*这里启动线程,让线程去处理与客户端交互的问题, 服务端就可以一直等待下一个客户端的访问,如此便可实现多个客户端同时访问同一接口*/ ClientTread ct=new ClientTread(s,list); list.add(ct); ct.start(); } }catch (Exception e1) {} } }
package tongxin; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.ArrayList; public class ClientTread extends Thread{ private Socket s; private ArrayList<ClientTread> list; OutputStream output; public ClientTread(Socket s,ArrayList<ClientTread> list) { this.s = s; this.list=list; } public void run(){ try{ InputStream input=s.getInputStream(); output=s.getOutputStream(); String str="请输入姓名:"; //默认输入的第一次输入的是名字 sendMes(str+"\r\n"); String name=readLine(input); while(true){ String mes=readLine(input); System.out.println(mes); //将消息发送给其他客户端 for(int i=0;i<list.size();i++){ ClientTread t=list.get(i); if(t==this)continue; t.sendMes(name+":"+mes+"\r\n"); } if("bye".equals(s)){ input.close(); output.close(); s.close(); break; } } }catch(Exception e2){} } public String readLine(InputStream input) throws IOException{ ByteArrayOutputStream bos=new ByteArrayOutputStream(); while(true){ int n=input.read(); if(n=='\r')continue; if(n=='\n')break; bos.write(n); } byte bytes[]=bos.toByteArray(); String string = new String(bytes,"GBK"); return string; } public void sendMes(String mes) throws IOException{ output.write(mes.getBytes("GBK")); output.flush(); } }
package tongxin; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.ArrayList; public class ClientTread extends Thread{ private Socket s; private ArrayList<ClientTread> list; OutputStream output; public ClientTread(Socket s,ArrayList<ClientTread> list) { this.s = s; this.list=list; } public void run(){ try{ InputStream input=s.getInputStream(); output=s.getOutputStream(); String str="请输入姓名:"; //默认输入的第一次输入的是名字 sendMes(str+"\r\n"); String name=readLine(input); while(true){ String mes=readLine(input); System.out.println(mes); //将消息发送给其他客户端 for(int i=0;i<list.size();i++){ ClientTread t=list.get(i); if(t==this)continue; t.sendMes(name+":"+mes+"\r\n"); } if("bye".equals(s)){ input.close(); output.close(); s.close(); break; } } }catch(Exception e2){} } public String readLine(InputStream input) throws IOException{ ByteArrayOutputStream bos=new ByteArrayOutputStream(); while(true){ int n=input.read(); if(n=='\r')continue; if(n=='\n')break; bos.write(n); } byte bytes[]=bos.toByteArray(); String string = new String(bytes,"GBK"); return string; } public void sendMes(String mes) throws IOException{ output.write(mes.getBytes("GBK")); output.flush(); } }
package tongxin; //降低耦合度的接口 public interface MsgListener { public void onRecvMsg(String msg); }
相对于以前,这次代码比较多,代码比较难的地方写有注释,如果对线程和输入输出流的知识比较熟练的话,应该不难理解。
相关推荐
java实验实现网络通信,服务端
(Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的...
JAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zip...
java 网络通信 实例 java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例
java网络通信系统的研究与开发(代码+论文+开题报告)
JAVA网络通信系统的研究与开发(源代码+论文+开题报告) JAVA网络通信系统的研究与开发(源代码+论文+开题报告) JAVA网络通信系统的研究与开发(源代码+论文+开题报告) JAVA网络通信系统的研究与开发(源代码+论文+开题...
JAVA网络通信系统的研究与开发(论文+源代码+开题报告)JAVA网络通信系统的研究与开发(论文+源代码+开题报告)JAVA网络通信系统的研究与开发(论文+源代码+开题报告)JAVA网络通信系统的研究与开发(论文+源代码+开题报告)...
JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络...
JAVA网络通信系统的研究与开发(论文+源代码+开题报告) JAVA网络通信系统的研究与开发(论文+源代码+开题报告) JAVA网络通信系统的研究与开发(论文+源代码+开题报告) JAVA网络通信系统的研究与开发(论文+源代码+开题...
java毕业设计——java网络通信系统的研究与开发(论文+源代码+开题报告).zip java毕业设计——java网络通信系统的研究与开发(论文+源代码+开题报告).zip java毕业设计——java网络通信系统的研究与开发(论文+源代码+...
《Java网络通信系统的研究与开发》是指利用Java编程语言进行网络通信系统的设计、开发和实现的过程。以下是该过程的描述: 技术概述: Java网络通信系统是指利用Java语言及其相关技术实现的,用于在网络环境下进行...
本课题是应用了计算机网络通信技术和JAVA网络编程的基础知识,以JAVA为平台,利用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发出的基于Socket的网络即时通信系统。系统采用客户机/服务器(C/S)的模式...
javaweb毕业设计-JAVA网络通信系统的研究与开发(lw+源代码+开题报告)(可做课程设计).rarjavaweb毕业设计-JAVA网络通信系统的研究与开发(lw+源代码+开题报告)(可做课程设计).rarjavaweb毕业设计-JAVA网络通信系统的...
javaweb毕业设计-JAVA网络通信系统的研究与开发(源代码+lw+开题报告)(可做课程设计).rarjavaweb毕业设计-JAVA网络通信系统的研究与开发(源代码+lw+开题报告)(可做课程设计).rarjavaweb毕业设计-JAVA网络通信系统的...
java网络通信25.pdfjava网络通信25.pdf
java网络通信新系统java网络通信新系统java网络通信新系统java网络通信新系统java网络通信新系统java网络通信新系统java网络通信新系统
java网络通信,使用TCP协议,代码可直接导入运行。完整的UI界面方便大家学习