socket实例2
第二个实例创建一个java工程,基于tomcat服务器,程序运行时会启动客户端,实现了一个客户端向其他的客户端发送即时信息的功能
MainWindow.java
- package com.jikexueyuan.myjavachatclient.view;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import javax.swing.GroupLayout;
- import javax.swing.GroupLayout.Alignment;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JTextArea;
- import javax.swing.JTextField;
- import javax.swing.LayoutStyle.ComponentPlacement;
- import javax.swing.border.EmptyBorder;
- import com.jikexueyuan.myjavachatclient.main.ChatManager;
- public class MainWIndow extends JFrame {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private JPanel contentPane;
- JTextArea txt;
- private JTextField ip;
- private JTextField send;
- /**
- * Create the frame.
- */
- public MainWIndow() {
- setAlwaysOnTop(true);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setBounds(, , , );
- contentPane = new JPanel();
- contentPane.setBorder(new EmptyBorder(, , , ));
- setContentPane(contentPane);
- txt = new JTextArea();
- txt.setText("Ready...");
- ip = new JTextField();
- ip.setText("127.0.0.1");
- ip.setColumns();
- JButton button = new JButton("连接到服务器");
- button.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent arg0) {
- ChatManager.getCM().connect(ip.getText());
- }
- });
- send = new JTextField();
- send.setText("你好");
- send.setColumns();
- JButton button_1 = new JButton("发送");
- button_1.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent arg0) {
- ChatManager.getCM().send(send.getText());
- appendText("我说:"+send.getText());
- send.setText("");
- }
- });
- GroupLayout gl_contentPane = new GroupLayout(contentPane);
- gl_contentPane.setHorizontalGroup(
- gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
- .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
- .addGroup(gl_contentPane.createSequentialGroup()
- .addContainerGap()
- .addComponent(txt, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE))
- .addGroup(gl_contentPane.createSequentialGroup()
- .addContainerGap()
- .addComponent(ip, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(button))
- .addGroup(gl_contentPane.createSequentialGroup()
- .addComponent(send, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(button_1, GroupLayout.PREFERRED_SIZE, , GroupLayout.PREFERRED_SIZE)))
- .addContainerGap())
- );
- gl_contentPane.setVerticalGroup(
- gl_contentPane.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_contentPane.createSequentialGroup()
- .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
- .addComponent(ip, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(button))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(txt, GroupLayout.DEFAULT_SIZE, , Short.MAX_VALUE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
- .addComponent(send, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(button_1)))
- );
- contentPane.setLayout(gl_contentPane);
- }
- public void appendText(String in) {
- txt.append("\n"+in);
- }
- }
StartClient.java
- package com.jikexueyuan.myjavachatclient.main;
- import java.awt.EventQueue;
- import com.jikexueyuan.myjavachatclient.view.MainWIndow;
- public class StartClient {
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- try {
- MainWIndow frame = new MainWIndow();
- frame.setVisible(true);
- ChatManager.getCM().setWindow(frame);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
- }
ChatManager.java
- package com.jikexueyuan.myjavachatclient.main;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import com.jikexueyuan.myjavachatclient.view.MainWIndow;
- public class ChatManager {
- private ChatManager(){}
- private static final ChatManager instance = new ChatManager();
- public static ChatManager getCM() {
- return instance;
- }
- MainWIndow window;
- String IP;
- Socket socket;
- BufferedReader reader;
- PrintWriter writer;
- public void setWindow(MainWIndow window) {
- this.window = window;
- window.appendText("文本框已经和ChatManager绑定了。");
- }
- public void connect(String ip) {
- this.IP = ip;
- new Thread(){
- @Override
- public void run() {
- try {
- socket = new Socket(IP, );
- writer = new PrintWriter(
- new OutputStreamWriter(
- socket.getOutputStream()));
- reader = new BufferedReader(
- new InputStreamReader(
- socket.getInputStream()));
- String line;
- while ((line = reader.readLine()) != null) {
- window.appendText("收到:"+line);
- }
- writer.close();
- reader.close();
- writer = null;
- reader = null;
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }.start();
- }
- public void send(String out) {
- if (writer != null) {
- writer.write(out+"\n");
- writer.flush();
- }else {
- window.appendText("当前的链接已经中断");
- }
- }
- }
将工程运行起来,这里我启动2个客户端
实现了即时通信
socket实例2的更多相关文章
- 网络编程基础【day09】:简单socket实例(二)
本节内容 1.概述 2.socket实例 3.总结 一.概述 之前我们只是介绍了soket的概念和一些逻辑图表,下面我们来看看,socket的客户端和服务端到底是怎么用的? 二.socket实例 2. ...
- java tcp socket实例
java tcp socket实例 2011-04-20 13:58 2364人阅读 评论(1) 收藏 举报 socketjavatcpthreadserverclass package com.ne ...
- python socket实例练习
Web Server是基于Socket编程,又称之为网络编程,socket是网络编程接口,socket可以建立网络连接,读数据,写数据.socket模块定义了一些常量参数,用来指定socket的的地址 ...
- C # socket 实例
同步客户端存储示例 下面的示例程序创建连接到服务器的客户端. 客户端使用一个同步套接字生成,因此,客户端应用程序的执行挂起,直到服务器返回响应. 应用程序将字符串发送到服务器 ...
- py测试一个Socket实例
本实例旨在了解py和socket的一些相关知识. 1.服务器端搭建py监听程序. 在客户端搭建python,linux默认自带了python2.7,先不管安装了. 接着编写socket程序,可以在本地 ...
- python socket实例
1.客户端向服务端发送 #coding:utf-8 '''客户端''' import socket khd=socket.socket() #声明socket类型,同时生产socket连接对象 khd ...
- 简单的php socket 实例
server: <?php set_time_limit(0); $ip = '127.0.0.1'; $port = 8888; // 1. 创建 if( ($sock = socket_cr ...
- socket实例1
第一个例子创建了一个java工程,用来测试Socket的连接功能,通过浏览器可访问,地址为:127.0.0.1:端口号 MyServerSocket.java, package com.jikexue ...
- java Socket实例
可以实现客户端与服务端双向通信,支持多客户端连接,客户端断开连接,服务端不会出现异常 服务端代码: package com.thinkgem.jeesite.modules.socketTest.de ...
随机推荐
- 小学生之浅谈Struts2与struts1的运行机制
Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(s ...
- web页面打印
在使用的两种方式打印: 第一种:js如下 function doPrint() { allhtml = window.document.body.innerHTML; starstr = " ...
- js数组的操作及数组与字符串的相互转化
数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...
- vmware-tools(vmware workstation 10.0.4)安装的时候遇到的bug
有个GitHub,专门解决C++编译的时候出的问题 地址
- asp.net微信开发第八篇----永久素材管理
除了3天就会失效的临时素材外,开发者有时需要永久保存一些素材,届时就可以通过本接口新增永久素材. 最近更新,永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用 ...
- GIt/Github常用命令
1)git init:初始化本地仓库 2)创建文件:touch read.txt 3)当操作本地的文件时,使用常用的命令,如(mv,ls..)就可以操作,当操作暂存区的文件时需要在命令前家git,并且 ...
- android:http下载文件并保存到本地或SD卡
想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...
- 武汉科技大学ACM :1002: 零起点学算法38——求阶乘和
Problem Description 输入一个正整数n(n<=10),计算 S=1!+2!+3!+...+n! Input 输入一个正整数n(n<=10)(多组数据) Output 输出 ...
- [转]机器学习——C4.5 决策树算法学习
1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分 ...
- C++ 约瑟夫环
约瑟夫环: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周 ...