`
lj_gzy2014
  • 浏览: 18039 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java网络通信

    博客分类:
  • java
 
阅读更多

            没接触通信编程之前,总觉得通信好神秘,不知道移动通信是如何实现了“天涯若比邻”的梦想的。接触基本的通信原理后,才从技术层面对通信有了一定的了解。

              基本的通信实现需要些什么呢?首先需要一个服务器和一个客户端。通信的基本过程就是服务器和客户端的交互,服务器将要传送的文件送到服务器,服务器根据客户端的要求发送给指定的客户端,从而完成了客户端通过服务器与其它客户端通信的目的。

              下面来看一个完成基本通信的一个小例子

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网络通信系统的研究与开发是IT领域中的一个重要课题,它涉及到多方面的技术,包括网络编程、并发处理、数据传输以及服务器架构等。本项目提供的源代码和论文详细阐述了如何利用Java实现一个高效的网络通信系统。...

    JAVA网络通信系统的研究与开发,java远程通信及应用的研究,Java

    本课题是应用了计算机网络通信技术和JAVA网络编程的基础知识,以JAVA为平台,利用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发出的基于Socket的网络即时通信系统。(论文+源代码+开题报告)

    java网络通信服务端

    java实验实现网络通信,服务端

    Java 网络通信程序设计

    Java 网络通信程序设计 Java 网络通信程序设计是指使用 Java 语言来实现网络通信的功能。这种设计通常涉及到Socket 通信、TCP/IP 套接字连接、输入输出流、线程等概念。 在这里,我们将从以下几个方面来探讨 Java ...

    (Java毕业设计)JAVA网络通信系统的研究与开发(源代码++开题报告).rar

    (Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的研究与开发(Java毕业设计)JAVA网络通信系统的...

    JAVA网络通信系统的研究与开发(源代码).zip

    JAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zipJAVA网络通信系统的研究与开发(源代码).zip...

    java网络通信实例20

    java 网络通信 实例 java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例

    JAVA网络通信系统的研究与开发(论文+源代码+开题报告)

    JAVA网络通信系统的研究与开发(论文+源代码+开题报告)JAVA网络通信系统的研究与开发(论文+源代码+开题报告)JAVA网络通信系统的研究与开发(论文+源代码+开题报告)JAVA网络通信系统的研究与开发(论文+源代码+开题报告)...

    JAVA网络通信系统的研究与开发(源代码+论文+开题报告).rar

    JAVA网络通信系统的研究与开发(源代码+论文+开题报告) JAVA网络通信系统的研究与开发(源代码+论文+开题报告) JAVA网络通信系统的研究与开发(源代码+论文+开题报告) JAVA网络通信系统的研究与开发(源代码+论文+开题...

    java网络通信TCP

    Java网络通信是一个重要的主题,特别是在开发分布式系统和网络应用程序时。TCP(传输控制协议)是互联网上广泛使用的面向连接的、可靠的传输层协议。在这个Java项目中,我们专注于使用TCP进行网络通信,提供了完整的...

    JAVA网络通信系统的研究与开发(LW+源代码+开题报告).zip

    JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络通信系统的研究与开发(LW+源代码+开题报告)JAVA网络...

    JAVA网络通信系统的研究与开发.doc

    JAVA网络通信系统的研究与开发是信息技术领域中的一个重要课题,它涉及到如何使用JAVA语言构建网络通信应用,以便实现在互联网上的信息交互。JAVA网络通信系统通常包括客户端和服务器端的架构,允许用户通过网络进行...

    JAVA网络通信系统的研究与开发(论文+源代码+开题报告).rar

    JAVA网络通信系统的研究与开发(论文+源代码+开题报告) JAVA网络通信系统的研究与开发(论文+源代码+开题报告) JAVA网络通信系统的研究与开发(论文+源代码+开题报告) JAVA网络通信系统的研究与开发(论文+源代码+开题...

    Java网络通信源代码

    Java网络通信源代码是Java编程领域中的一个重要主题,它涵盖了如何使用Java API进行网络上的数据交换。这个主题包括了客户端-服务器模型、套接字编程、多线程、输入输出流以及TCP和UDP协议的使用等核心概念。下面将...

    java毕业设计——java网络通信系统的研究与开发(论文+源代码+开题报告).zip

    java毕业设计——java网络通信系统的研究与开发(论文+源代码+开题报告).zip java毕业设计——java网络通信系统的研究与开发(论文+源代码+开题报告).zip java毕业设计——java网络通信系统的研究与开发(论文+源代码+...

Global site tag (gtag.js) - Google Analytics