`
tomrose
  • 浏览: 147423 次
  • 来自: ...
社区版块
存档分类
最新评论

利用 JavaSocket 实现简单通信

    博客分类:
  • java
阅读更多

在java 中实现通信是利用java.net包

利用服务端ServerSocket和客户端Socket类来通信,它是建立在tcp协议基础上,面向字节的稳定的通信

首先是客户端Socket,它是连接的发起者。

public class ClientAgent {

 DataOutputStream ops; //输出流(指向服务器)
 DataInputStream ips;//输入流(来自服务器)
 String cltRequest;//客户端请求
 String svrResponse;//服务器端回应
 Socket clientSocket=null;
 public ClientAgent(String serverName,int port)
 {
     try
  {
     clientSocket=new Socket(serverName,port ); //根据服务器名和端口号建立Socket
  System.out.println("客户代理请求服务端成功!");
  ops=new DataOutputStream(clientSocket.getOutputStream());//获得Socket的输出流
  ips=new DataInputStream(clientSocket.getInputStream());//获得Socket的输入流
  
     }
  catch(Exception e)
  {
  System.out.println("无法连接服务器!");
  }

 }
 
 public void sendRequest(String request)
 {
 try {
  ops.writeUTF(request);
 } catch (IOException e) {
  System.out.println("客户端转换字节数组异常!");
 }
 }
 
 public String getResponse()
 {
 String str=new String();
 try
 {
  str=ips.readUTF();
  
  clientSocket.close();
 }
 catch(IOException e){}
 return str;
 }

}

客户端界面

public class JavaClient extends JFrame implements ActionListener {

 private JButton sendButton; //"发送"按钮
 private JTextField inputField; // 输入框
 private JTextArea outputArea; // 服务器返回框
    private String serverAddress="localhost";//默认地址
 private int port=1001;//默认端口
 public JavaClient(String address,int port,String tittle)
 {
  this.serverAddress = address;
  this.port=port;
  inputField=new JTextField("这里输入..."); //供客户端输入的文本框
  outputArea=new JTextArea("服务器返回"); //显示服务器返回数据的文本域
  sendButton=new JButton("发送");
  JPanel panel=new JPanel(); //新建面板
  panel.setLayout(new BorderLayout()); //设置面板风格为BorderLayout
  panel.add(inputField,BorderLayout.NORTH); //放置控件
  panel.add(outputArea,BorderLayout.CENTER);
  panel.add(sendButton, BorderLayout.SOUTH);
  setTitle(tittle);
  
  setContentPane(panel);
  this.addWindowListener(new WindowListener(){

   public void windowActivated(WindowEvent e) {
   
   }
   public void windowClosed(WindowEvent e) {
   }
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
   public void windowDeactivated(WindowEvent e) {
   }
   public void windowDeiconified(WindowEvent e) {
   }
   public void windowIconified(WindowEvent e) {
   }
   public void windowOpened(WindowEvent e) {
   }
  });
  
  this.sendButton.addActionListener(this);
 }
 public void actionPerformed(ActionEvent e) {
  ClientAgent clientAgent = new ClientAgent(serverAddress,port);
  clientAgent.sendRequest(inputField.getText());
  String response=clientAgent.getResponse();
  outputArea.append("\n"+response);
 }


 public static void main(String[] args) {
  JavaClient frame = new JavaClient("localhost",1001,"客户端");
  frame.setBounds(100, 100, 100, 200);
  frame.setVisible(true);
 
  

 }

服务端处理客户端发出的请求,服务端应先打开 调用cltSkt=svrSkt.accept();

public class ServerAgent {

 //private int port=1001;
 private ServerSocket svrSkt=null;
 private Socket cltSkt=null;
 private DataInputStream input=null; //输入流,来自客户端
 private DataOutputStream output=null; //输出流,指向客户端
 public ServerAgent(int port)
 {
  System.out.println("服务器代理正在监听,端口:"+port);
  try {
   svrSkt = new ServerSocket(port);
  } catch (IOException e) {
   System.out.println("监听端口"+port+"失败");
  }
  
  
  try {
   cltSkt=svrSkt.accept();//服务端当前线程挂起,等待客户请求
   System.out.println("服务端获得客户端socket");
  } catch (IOException e) {
   System.out.println("连接失败");
  }

  try
  {
  input=new DataInputStream(cltSkt.getInputStream()); //获得输入流
  output=new DataOutputStream(cltSkt.getOutputStream()); //获得输出流
  }
  catch(IOException e){}
  
 
 }
 
 public String getRequest()
 {
 String frmClt=null;
 try
 {
 frmClt= input.readUTF();
 System.out.println("readinfo...."+frmClt);
 }
 catch(Exception e){
 System.out.println("无法读取端口.....");
 System.exit(0);
 }
 return frmClt;
 }
 
 public void sendResponse(String response)
 {
 try
 {
     System.out.println("writeinfo...." +response);
     output.writeUTF(response);
 
 svrSkt.close();
 
 }
 catch(Exception e){
 System.out.println("写端口失败......");
 System.exit(0);
 }
 }
 

 public Socket getCltSkt() {
  return cltSkt;
 }

 public void setCltSkt(Socket cltSkt) {
  this.cltSkt = cltSkt;
 }

 public ServerSocket getSvrSkt() {
  return svrSkt;
 }

 public void setSvrSkt(ServerSocket svrSkt) {
  this.svrSkt = svrSkt;
 }

 }

开起个线程为客户端服务

public class ServerThread extends Thread {

 private boolean ifRun=true; 
 private int port;
 public ServerThread(int port)
 {
 this.port=port; 
 }
 public boolean isIfRun() {
  return ifRun;
 }

 public void setIfRun(boolean ifRun) {
  this.ifRun = ifRun;
 }

 public void run() {
  
   while(true){
   try {
    sleep(200);
   } catch (InterruptedException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
   }
   System.out.println(this.currentThread());
   ServerAgent serverAgent = new ServerAgent(port);
     
    serverAgent.sendResponse(serverAgent.getRequest());
     
   }
  
 }

 public static void main(String[] args) {
  ServerThread operate = new ServerThread(1001);
  operate.start();
  
 }

}


 

 

分享到:
评论

相关推荐

    javaSocket的即时通信系统客户端代码分享

    在本“Java Socket的即时通信系统客户端代码分享”中,我们将探讨如何利用Java Socket构建一个简单的即时通信系统客户端。 首先,我们需要理解TCP(传输控制协议)的工作原理。TCP是一种面向连接的、可靠的传输协议...

    JavaSocket编程实现的简单群聊软件

    JavaSocket编程实现的简单群聊软件是基于Java的网络通信技术,主要利用了TCP协议进行数据传输。在本文中,我们将深入探讨Java Socket编程的概念、原理以及如何利用它来构建一个简单的控制台版群聊应用。 一、Java ...

    基于JavaSocket多客户端并发通信聊天程序的设计与实现

    通过上述介绍可以看出,Java Socket提供了一种简单有效的方式来实现多客户端与服务器之间的并发通信。通过合理的多线程设计和Socket通信机制的应用,可以构建出高性能、可扩展性强的网络应用程序,如多人在线聊天...

    基于JavaSocket多客户端并发通信聊天程序的设计与实现..docx

    本文将详细介绍如何利用Java Socket API实现一个多客户端并发通信的聊天程序。 #### 2. Socket通信 ##### 2.1 Socket通信机制 在Java中,Socket通信有两种主要形式:流式Socket(基于TCP协议)和数据报式Socket...

    Java-JavaSocket聊天室实现-源码

    在本项目"Java-JavaSocket聊天室实现-源码"中,我们将深入探讨如何使用Java Socket来创建一个简单的聊天室应用。这个源码示例将帮助你理解Socket的基本用法,包括连接建立、数据传输和连接关闭等核心概念。 首先,...

    用Java Socket实现的一个多人聊天的小软件

    本项目“用Java Socket实现的一个多人聊天的小软件”就是一个很好的实践案例,它利用了Java的Socket和Thread类,创建了一个简单的多用户聊天室。下面将详细解释这个项目中的关键知识点。 首先,`Socket`在Java中...

    java Socket通信

    总结来说,Java Socket通信是通过`Socket`和`ServerSocket`类实现的,它们提供了创建网络连接、读写数据的基本接口。在实际应用中,我们还需要考虑并发处理、错误处理以及安全性,如使用SSL/TLS加密。这个实例将帮助...

    java socket,javasocket教程

    - 使用Java Socket实现简单的客户端/服务器模型,客户端发送消息到服务器,服务器广播给所有在线客户端。 2. **文件传输** - 基于Socket实现文件的上传和下载功能,通过流传输大文件。 3. **分布式系统** - 在...

    JavaSocket

    在本文中,我们将深入探讨如何使用Java Socket来实现一个简单的Tomcat服务器,这涉及到网络编程的一些基本概念和技术。 首先,理解Socket的概念至关重要。Socket可以看作是两台计算机之间的通信通道,它允许应用...

    基于javaSocket聊天室

    在这个“基于javaSocket聊天室”项目中,我们将会探讨如何利用Java的Socket API创建一个简单的聊天室,其中不仅支持文本聊天,还具备文件传输功能。 首先,让我们了解Java Socket的基本概念。Java Socket是Java提供...

    Java网络通信对ICQ的实现.pdf

    Java 网络通信对 ICQ 的实现可以充分利用两端硬件环境的优势,将任务合理分配到 Client 端和 Server 端来实现,降低了系统的通讯开销。由于现在的计算机正在改变我们的通信、工作和娱乐的方式,Java 网络通信对 ICQ ...

    JAVA 网络白板

    【JAVA 网络白板】是一个基于Java编程语言实现的简单在线绘图工具,它允许用户通过网络在共享的画布上进行实时交互式的绘图。这个项目的核心目标是展示如何利用Java来构建一个基本的网络通信系统,以及如何在客户端...

    javaSocket共16页.pdf.zip

    Java Socket编程是Java平台中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的、面向连接的、可靠的字节流通信。在Java中,Socket类和ServerSocket类是进行网络通信的基础,它们分别代表了客户端和...

    javaSocket聊天室

    在这个"Java Socket聊天室"项目中,我们将会深入探讨如何利用Java的Socket API构建一个基本的聊天应用,让多个用户能够实时交流。 首先,我们需要理解Socket的概念。在Java中,Socket是TCP/IP协议的接口,用于实现...

    javasocket服务器给浏览器发信息1.doc

    在本文中,我们将探讨如何使用Java Socket实现一个简单的HTTP服务器,并理解HTTP协议的基本原理。 HTTP(超文本传输协议)是互联网上应用最广泛的数据交换协议,主要用于web浏览器与服务器之间的通信。在Java中,...

    Java的多线程和socket实现聊天室代码

    本项目提供了一个简单的Java聊天室实现,它基于单服务器进程和多客户端线程,利用Socket进行通信,非常适合初学者理解和实践相关技术。 首先,我们来深入理解Java的多线程。在Java中,多线程允许程序同时执行多个...

    javasocket服务器给浏览器发信息.pdf

    Java Socket 实现简单的HTTP服务是通过Java的网络编程接口,即Socket类来完成的。Socket允许客户端(通常是Web浏览器)与服务器之间建立TCP连接,进行双向通信。在这个例子中,我们创建了一个简单的HTTP服务器,它...

    java代码【网络白板】

    本项目“java代码【网络白板】”显然利用了Java的强大功能,构建了一个在线协作工具,允许用户进行图形绘制和简单的文字交流。下面我们将深入探讨这个项目涉及到的关键知识点。 1. **Java GUI(图形用户界面)**: ...

    简单java socket在线聊天室

    在本项目“简单java socket在线聊天室”中,我们利用Java的Socket类和ServerSocket类创建了一个简单的多用户聊天环境。下面将详细解释相关知识点。 1. **Socket与ServerSocket** - **Socket**:Java中的Socket类...

Global site tag (gtag.js) - Google Analytics