Socket通信客户端设计(Java)
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)的更多相关文章
- 基于Tcp协议的简单Socket通信实例(JAVA)
好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...
- c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP 入门级客户端与服务端交互代码 网 ...
- Socket通信客户端和服务端代码
这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...
- C#应用视频教程1.2 Socket通信客户端实现
接下来我们尝试实现最简单的Socket客户端,为了确保只可能你的代码有问题,服务器要先用别人成熟的代码测试(这也是编程的一个技巧,先不要用自己写的客户端测试自己写的服务器,这样出了问题你也不知道谁有问 ...
- C#应用视频教程1.3 Socket通信客户端完善
我们先把前面的代码封装成一个完整的类,因为跟网络相关的方法并不一定是建立socket的服务器和客户端,所以还是应该把两个分开,比如获取本机IP,修改本机IP,PING远程主机这些事情应该放在一个单独的 ...
- Socket通信-客户端
WSADATA wsd; SOCKET sHost; SOCKADDR_IN servAddr; if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) retu ...
- Java Socket 通信实例 - 转载
基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些 ...
- php的socket通信
socket通常叫做'套接字',用于描述IP地址和端口,是一个通信链的句柄.应用程序通过套接字向网络发出请求或者应答忘了请求.socket既不是程序,也不是协议,其只是操作系统提供的通信层的一组抽象A ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
随机推荐
- jquery.cookie中的操作
http://w3school.com.cn/js/js_cookies.asp jquery.cookie中的操作: jquery.cookie.js是一个基于jquery的插件,点击下载! 创建一 ...
- 2016.07.09 offsetWidth 和一个问题。
javascript 中 offsetWidth 是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变 clientWidth.offsetWidth.clientHeight区别 IE6.0.F ...
- 【python】入门学习(四)
函数: 定义函数 #area.py from math import pi def area(radius): """Return the area of a circl ...
- ios 宏定义 系统版本 判定
当需要判断iOS系统版本的时候,相信很多人都会这么干: #define SystemVersion [[UIDevice currentDevice] systemVersion].floatValu ...
- 构建新版本APP上传流程
//既然是构建新版本的 APP,那么所有的证书都是已经存在了的,因此以下不再重复描述证书申请过程,如有需要请自行 Google 相关流程. 1)更改版本号: 2)去掉工程内的全局断点,同时关闭僵尸调试 ...
- 【转】C++多态性
----转自http://blog.csdn.net/hackbuteer1/article/details/7475622 C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言.我们今天就 ...
- Linux 中文乱码问题解决
本文转载自:http://linux-wiki.cn/wiki/zh-hans/Java%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E ...
- Android Hybrid开发
参考:谈谈Android App混合开发 Html 5和Native的交互 WebView 本来就支持js和Java相互调用,你只需要开启 WebView 的JavaScript脚本执行, 然后通过代 ...
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...
- iOS - 常用的宏定义
1.处理NSLog事件(开发者模式打印,发布者模式不打印) 1 2 3 4 5 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,& ...