public class Client extends JFrame implements Runnable{

     private JPanel jPanel= new JPanel();
private JLabel jLabel1=new JLabel("姓名: ");
private JLabel jLabel2=new JLabel("端口: ");
private JTextField jTextField1=new JTextField();
private JTextField jTextField2=new JTextField();
private JTextArea jTextArea=new JTextArea();
private JTextField jTextField3=new JTextField();
private JButton jButton=new JButton("发送(S)"); private JScrollPane jScrollPane=new JScrollPane();
private BufferedReader bufferedReader;
private PrintWriter printWriter;
private Socket socket; private static String title="劲爆聊天室"; public Client(String port,String name){
super(title+":"+name);
this.setSize(377,387);
this.add(jPanel);
jPanel.setLayout(null);
jTextArea.setEditable(false);
//
jPanel.add(jLabel1);
jLabel1.setBounds(10, 10, 60, 20);
jTextField1.setText(name);
jTextField1.setEditable(false);
jPanel.add(jTextField1);
jTextField1.setBounds(60, 10, 60, 21); jPanel.add(jLabel2);
jLabel2.setBounds(125, 10, 60, 20);
jTextField2.setText(port);
jTextField2.setEditable(false);
jPanel.add(jTextField2);
jTextField2.setBounds(190, 10, 60, 21);; jPanel.add(jTextField3);
jTextField3.setBounds(10, 270, 320, 21); jTextArea.setColumns(20);
jTextArea.setRows(5); jTextArea.setEditable(false);
jScrollPane.setViewportView(jTextArea);
jPanel.add(jScrollPane);
jScrollPane.setBounds(10, 42, 320, 220); jPanel.add(jButton);
jButton.setBounds(250, 300, 80, 22);
jButton.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jButton){
printWriter.println(jTextField1.getText()+": "+jTextField3.getText());
jTextField3.setText("");
}
}
});
//Jtextfield不好控制啊。。。。
/* jTextField3.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
printWriter.println(jTextField1.getText()+":"+jTextField3.getText());
jTextField3.setText("");
}
});*/
getSocket();
}
@Override
public void run(){
while(true)
{
try {
jTextArea.append(bufferedReader.readLine()+"\n"); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
} public void getSocket(){
jTextArea.append("正在与劲爆聊天室进行连接..."+"\n");
try {
socket=new Socket("127.0.0.1",PortNumber.PORT.getNumber());
jTextArea.append("劲爆聊天开始..."+"\n");
bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
printWriter=new PrintWriter(socket.getOutputStream(),true);
new Thread(this).start();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} }

考虑到多客户端,此处用到了多线程。Socket确实有意思....

非常感叹T公司如果把一个IM软件,做到亿级用户量,如何解决并发,如何解决Server的及时回应,如何完成数据存储...

想不出来了...

Socket通信客户端设计(Java)的更多相关文章

  1. 基于Tcp协议的简单Socket通信实例(JAVA)

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...

  2. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

  3. Socket通信客户端和服务端代码

    这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...

  4. C#应用视频教程1.2 Socket通信客户端实现

    接下来我们尝试实现最简单的Socket客户端,为了确保只可能你的代码有问题,服务器要先用别人成熟的代码测试(这也是编程的一个技巧,先不要用自己写的客户端测试自己写的服务器,这样出了问题你也不知道谁有问 ...

  5. C#应用视频教程1.3 Socket通信客户端完善

    我们先把前面的代码封装成一个完整的类,因为跟网络相关的方法并不一定是建立socket的服务器和客户端,所以还是应该把两个分开,比如获取本机IP,修改本机IP,PING远程主机这些事情应该放在一个单独的 ...

  6. Socket通信-客户端

    WSADATA wsd; SOCKET sHost; SOCKADDR_IN servAddr; if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) retu ...

  7. Java Socket 通信实例 - 转载

    基于Tcp协议的简单Socket通信实例(JAVA)   好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些 ...

  8. php的socket通信

    socket通常叫做'套接字',用于描述IP地址和端口,是一个通信链的句柄.应用程序通过套接字向网络发出请求或者应答忘了请求.socket既不是程序,也不是协议,其只是操作系统提供的通信层的一组抽象A ...

  9. JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

    OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...

随机推荐

  1. hadoop初识

    搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做).但很多开发的朋友在做了多年项目以后,都习惯是先How,然后What,最后才是Why,这样只会让自己变 ...

  2. Wince常见操作

    1.获取本地代码启动路径 //在代码启动路径下存在 Files 文件夹 Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName(). ...

  3. 手记-数学分析(高等数学)中有关算法效率的公式列举(O,Θ,Ω)

      权当数据结构与算法分析的学习手记     系数为一的幂级数部分和公式 ∑ n2 = 12 + 22 + 32 + ... + n2 = n(n+1)(2n+1)/6 = O(n3) ∑ n3 =  ...

  4. Java for LeetCode 228 Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  5. Xcode 6.3.2 提交APP(Upload Archive)时崩溃的解决办法

    最近在上传为客户做的APP时,发现Xcode总会在进行到Upload Archive这一步时崩溃,导致APP上载不了.下面说说网上搜索到的几种解决办法. 方法一 亲测有效,很简单: 1.重新打开Xco ...

  6. jquery.validate ajax提交

    页面引入jquery.validate.min.js <style> //引入错误格式     label.error {        display: block;        ma ...

  7. 【linux】gcc命令

    来源:http://man.linuxde.net/gcc 语法 gcc(选项)(参数) 选项 -o:指定生成的输出文件: -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -wall:显示警 ...

  8. 分页Bean终极封装

    package org.guangsoft.vo; import java.util.List; public class Page { private Integer pageNum; privat ...

  9. increadbuild重装

    客户端和服务端都重装,可能需要去任务管理其中停止相关的服务,重装之前要去注册表中删除旧的注册表项.一般情况下incredibuild对应的位置是:64位系统HKEY_CLASSES_ROOT\\Wow ...

  10. C#封装C++DLL

    1.新建一个C#-Windows-类库(用于创建C#类库(.dll)的项目)类型的工程 2.对于普通C++函数 XXXX_API void cppFun(int i); 在cs代码中添加 [DllIm ...