第二个实例创建一个java工程,基于tomcat服务器,程序运行时会启动客户端,实现了一个客户端向其他的客户端发送即时信息的功能

MainWindow.java

  1. package com.jikexueyuan.myjavachatclient.view;
  2.  
  3. import java.awt.event.MouseAdapter;
  4. import java.awt.event.MouseEvent;
  5.  
  6. import javax.swing.GroupLayout;
  7. import javax.swing.GroupLayout.Alignment;
  8. import javax.swing.JButton;
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTextArea;
  12. import javax.swing.JTextField;
  13. import javax.swing.LayoutStyle.ComponentPlacement;
  14. import javax.swing.border.EmptyBorder;
  15.  
  16. import com.jikexueyuan.myjavachatclient.main.ChatManager;
  17.  
  18. public class MainWIndow extends JFrame {
  19.  
  20. /**
  21. *
  22. */
  23. private static final long serialVersionUID = 1L;
  24. private JPanel contentPane;
  25. JTextArea txt;
  26. private JTextField ip;
  27. private JTextField send;
  28.  
  29. /**
  30. * Create the frame.
  31. */
  32. public MainWIndow() {
  33. setAlwaysOnTop(true);
  34. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  35. setBounds(, , , );
  36. contentPane = new JPanel();
  37. contentPane.setBorder(new EmptyBorder(, , , ));
  38. setContentPane(contentPane);
  39.  
  40. txt = new JTextArea();
  41. txt.setText("Ready...");
  42.  
  43. ip = new JTextField();
  44. ip.setText("127.0.0.1");
  45. ip.setColumns();
  46.  
  47. JButton button = new JButton("连接到服务器");
  48. button.addMouseListener(new MouseAdapter() {
  49. @Override
  50. public void mouseClicked(MouseEvent arg0) {
  51. ChatManager.getCM().connect(ip.getText());
  52. }
  53. });
  54.  
  55. send = new JTextField();
  56. send.setText("你好");
  57. send.setColumns();
  58.  
  59. JButton button_1 = new JButton("发送");
  60. button_1.addMouseListener(new MouseAdapter() {
  61. @Override
  62. public void mouseClicked(MouseEvent arg0) {
  63. ChatManager.getCM().send(send.getText());
  64. appendText("我说:"+send.getText());
  65. send.setText("");
  66. }
  67. });
  68. GroupLayout gl_contentPane = new GroupLayout(contentPane);
  69. gl_contentPane.setHorizontalGroup(
  70. gl_contentPane.createParallelGroup(Alignment.LEADING)
  71. .addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
  72. .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
  73. .addGroup(gl_contentPane.createSequentialGroup()
  74. .addContainerGap()
  75. .addComponent(txt, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE))
  76. .addGroup(gl_contentPane.createSequentialGroup()
  77. .addContainerGap()
  78. .addComponent(ip, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE)
  79. .addPreferredGap(ComponentPlacement.RELATED)
  80. .addComponent(button))
  81. .addGroup(gl_contentPane.createSequentialGroup()
  82. .addComponent(send, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE)
  83. .addPreferredGap(ComponentPlacement.RELATED)
  84. .addComponent(button_1, GroupLayout.PREFERRED_SIZE, , GroupLayout.PREFERRED_SIZE)))
  85. .addContainerGap())
  86. );
  87. gl_contentPane.setVerticalGroup(
  88. gl_contentPane.createParallelGroup(Alignment.LEADING)
  89. .addGroup(gl_contentPane.createSequentialGroup()
  90. .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
  91. .addComponent(ip, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  92. .addComponent(button))
  93. .addPreferredGap(ComponentPlacement.RELATED)
  94. .addComponent(txt, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE)
  95. .addPreferredGap(ComponentPlacement.RELATED)
  96. .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
  97. .addComponent(send, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  98. .addComponent(button_1)))
  99. );
  100. contentPane.setLayout(gl_contentPane);
  101. }
  102.  
  103. public void appendText(String in) {
  104. txt.append("\n"+in);
  105. }
  106. }

StartClient.java

  1. package com.jikexueyuan.myjavachatclient.main;
  2.  
  3. import java.awt.EventQueue;
  4.  
  5. import com.jikexueyuan.myjavachatclient.view.MainWIndow;
  6.  
  7. public class StartClient {
  8.  
  9. public static void main(String[] args) {
  10. EventQueue.invokeLater(new Runnable() {
  11. public void run() {
  12. try {
  13. MainWIndow frame = new MainWIndow();
  14. frame.setVisible(true);
  15. ChatManager.getCM().setWindow(frame);
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. });
  21. }
  22.  
  23. }

ChatManager.java

  1. package com.jikexueyuan.myjavachatclient.main;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import java.io.PrintWriter;
  8. import java.net.Socket;
  9. import java.net.UnknownHostException;
  10.  
  11. import com.jikexueyuan.myjavachatclient.view.MainWIndow;
  12.  
  13. public class ChatManager {
  14.  
  15. private ChatManager(){}
  16. private static final ChatManager instance = new ChatManager();
  17. public static ChatManager getCM() {
  18. return instance;
  19. }
  20.  
  21. MainWIndow window;
  22. String IP;
  23. Socket socket;
  24. BufferedReader reader;
  25. PrintWriter writer;
  26.  
  27. public void setWindow(MainWIndow window) {
  28. this.window = window;
  29. window.appendText("文本框已经和ChatManager绑定了。");
  30. }
  31.  
  32. public void connect(String ip) {
  33. this.IP = ip;
  34. new Thread(){
  35.  
  36. @Override
  37. public void run() {
  38. try {
  39. socket = new Socket(IP, );
  40. writer = new PrintWriter(
  41. new OutputStreamWriter(
  42. socket.getOutputStream()));
  43.  
  44. reader = new BufferedReader(
  45. new InputStreamReader(
  46. socket.getInputStream()));
  47. String line;
  48. while ((line = reader.readLine()) != null) {
  49. window.appendText("收到:"+line);
  50. }
  51. writer.close();
  52. reader.close();
  53. writer = null;
  54. reader = null;
  55. } catch (UnknownHostException e) {
  56. e.printStackTrace();
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. }.start();
  62. }
  63.  
  64. public void send(String out) {
  65. if (writer != null) {
  66. writer.write(out+"\n");
  67. writer.flush();
  68. }else {
  69. window.appendText("当前的链接已经中断");
  70. }
  71. }
  72. }

将工程运行起来,这里我启动2个客户端

实现了即时通信

socket实例2的更多相关文章

  1. 网络编程基础【day09】:简单socket实例(二)

    本节内容 1.概述 2.socket实例 3.总结 一.概述 之前我们只是介绍了soket的概念和一些逻辑图表,下面我们来看看,socket的客户端和服务端到底是怎么用的? 二.socket实例 2. ...

  2. java tcp socket实例

    java tcp socket实例 2011-04-20 13:58 2364人阅读 评论(1) 收藏 举报 socketjavatcpthreadserverclass package com.ne ...

  3. python socket实例练习

    Web Server是基于Socket编程,又称之为网络编程,socket是网络编程接口,socket可以建立网络连接,读数据,写数据.socket模块定义了一些常量参数,用来指定socket的的地址 ...

  4. C # socket 实例

    同步客户端存储示例 下面的示例程序创建连接到服务器的客户端.             客户端使用一个同步套接字生成,因此,客户端应用程序的执行挂起,直到服务器返回响应.  应用程序将字符串发送到服务器 ...

  5. py测试一个Socket实例

    本实例旨在了解py和socket的一些相关知识. 1.服务器端搭建py监听程序. 在客户端搭建python,linux默认自带了python2.7,先不管安装了. 接着编写socket程序,可以在本地 ...

  6. python socket实例

    1.客户端向服务端发送 #coding:utf-8 '''客户端''' import socket khd=socket.socket() #声明socket类型,同时生产socket连接对象 khd ...

  7. 简单的php socket 实例

    server: <?php set_time_limit(0); $ip = '127.0.0.1'; $port = 8888; // 1. 创建 if( ($sock = socket_cr ...

  8. socket实例1

    第一个例子创建了一个java工程,用来测试Socket的连接功能,通过浏览器可访问,地址为:127.0.0.1:端口号 MyServerSocket.java, package com.jikexue ...

  9. java Socket实例

    可以实现客户端与服务端双向通信,支持多客户端连接,客户端断开连接,服务端不会出现异常 服务端代码: package com.thinkgem.jeesite.modules.socketTest.de ...

随机推荐

  1. 小学生之浅谈Struts2与struts1的运行机制

    Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(s ...

  2. web页面打印

    在使用的两种方式打印: 第一种:js如下 function doPrint() { allhtml = window.document.body.innerHTML; starstr = " ...

  3. js数组的操作及数组与字符串的相互转化

    数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...

  4. vmware-tools(vmware workstation 10.0.4)安装的时候遇到的bug

    有个GitHub,专门解决C++编译的时候出的问题 地址

  5. asp.net微信开发第八篇----永久素材管理

    除了3天就会失效的临时素材外,开发者有时需要永久保存一些素材,届时就可以通过本接口新增永久素材. 最近更新,永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用 ...

  6. GIt/Github常用命令

    1)git init:初始化本地仓库 2)创建文件:touch read.txt 3)当操作本地的文件时,使用常用的命令,如(mv,ls..)就可以操作,当操作暂存区的文件时需要在命令前家git,并且 ...

  7. android:http下载文件并保存到本地或SD卡

    想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...

  8. 武汉科技大学ACM :1002: 零起点学算法38——求阶乘和

    Problem Description 输入一个正整数n(n<=10),计算 S=1!+2!+3!+...+n! Input 输入一个正整数n(n<=10)(多组数据) Output 输出 ...

  9. [转]机器学习——C4.5 决策树算法学习

    1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分 ...

  10. C++ 约瑟夫环

    约瑟夫环: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周 ...