1、方案介绍

应用程序通过使用用于描述IP地址和端口的“套接字”-Socket向网络发出请求或应答网络请求。Socket和ServerSocket类库位于Java.net包中。前者是建立网络连接时使用的,后者则是用于服务端的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例可完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生级别差别。他们的工作是通过SocketImpl类及其之类完成的。

程序包括服务器和客户端。详细原理图如下所示:

2、程序运行

程序运行之前,我们需要知道服务器端主机所在网络的地址,使用cmd查看如下:

该IPv4地址是172.16.80.88,子网掩码为255.255.255.0,默认网关是172.16.80.254。我们将得到的IP改写入客户端的相应地方即可。打开程序后,服务器处于监听状态。

服务器端代码

packageServer_Client;import javax.swing.*;import java.net.*;import java.lang.*;import java.awt.event.*;import java.io.*;public classServer {

JTextArea jta=null;

JTextField jtf=null;

JButton jb=null;

JScrollPane jsp=null;

JPanel jpl=null;

PrintWriter pw=null;public static voidmain(String[] args) {

MyServer msv=newMyServer();

}public voidMyServer(){

jta=newJTextArea();

jtf=new JTextField(20);

jsp=newJScrollPane(jta);

jb=new JButton("send");

jb.addActionListener(this);

jpl=newJPanel();this.add(jsp,"Center");

jpl.add(jtf);

jpl.add(jb);this.add(jsp,"South");this.setTitle("Server");this.setSize(400,300);this.setVisible(true);try{

ServerSocket ss=new ServerSocket(6666);//服务器监听

Socket s=ss.accept();

InputStreamReader isr=newInputStreamReader(s.getInputStream());

BufferedReader br=newBufferedReader(isr);

pw=new PrintWriter(s.getOutputStream(),true);while(true)

{

String info=br.readLine();//读取信息

jta.append("客户端对服务器说:"+info+"\r\n");

}

}catch(Exception e){

e.printStackTrace();

}

}

@Overridepublic voidactionPerformed(ActionEvent e){//如果按下发送按钮if(e.getSource()==jb){

String info=jtf.getText();

jta.append("服务器对客户端说:"+info+"\r\n");

pw.println(info);

jtf.setText("");

}

}

}

客户端代码

packageServer_Client;import javax.swing.*;import java.net.*;import java.awt.event.*;import java.io.*;public classClient {

JTextArea jta=null;

JTextField jtf=null;

JButton jb=null;

JScrollPane jsp=null;

JPanel jpl=null;

PrintWriter pw=null;public static voidmain(String[] args) {

MyClient met=newMyClient();

}publicMyClient()

{

jta=newJTextArea();

jtf=new JTextField(20);

jsp=newJScrollPane(jta);

jb=new JButton("send");

jb.addActionListener(this);

jpl=newJPanel();this.add(jsp,"Center");

jpl.add(jtf);

jpl.add(jb);this.add(jsp,"South");this.setTitle("Client");this.setSize(400,300);this.setVisible(true);try{

ServerSocket s=new ServerSocket("172.16.80.88",6666);

InputStreamReader isr=newInputStreamReader(s.getInputStream());

BufferedReader br=newBufferedReader(isr);

pw=new PrintWriter(s.getOutputStream(),true);while(true)

{

String info=br.readLine();//读取从服务器发来的信息

jta.append("客户端对服务器说:"+info+"\r\n");

}

}catch(Exception e){

e.printStackTrace();

}

}

@Overridepublic voidactionPerformed(ActionEvent e){if(e.getSource()==jb){

String info=jtf.getText();

jta.append("客户端对服务器说:"+info+"\r\n");

pw.println(info);

}

}

}

运行结果图如下:

java简单ai聊天_一个hello/hi的简单的网络聊天程序——JAVA相关推荐

  1. java关键字提取代码_一个站长常用的类似于获取关键词排名的java工具类

    可以通过指定关键词和站点名来自动抓取百度的搜索结果从而得知自己的网站在某个搜索词的排名,类似于http://www.aizhan.com/siteall/zuidaima.com/ import ja ...

  2. php加入语音播报功能_一个有语音播报功能的网络聊天室PHP源码

    二次元作风..语音播报的功用贼欢乐,妹子说脏话的时分太逗了,演示站(明天估量就删了)能够测试下这个语音播报的功用: 以下装置过程基于一个洁净的CentOS7X64Minimal. 装置Nodejs: ...

  3. java 语言 写字板_一个简单的java语言写字板.docx

    一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...

  4. android java thread_Android中断并重启一个Thread线程的简单方法

    这里简单的总结下(大概思路,没调试,可能会有错!): MyThread.java pulbic class MyThread implemets Thread{ @overide public voi ...

  5. Java开发组装电脑_设计模式-组装电脑入门简单工厂

    前言 简单工厂模式,虽然不在23种设计模式中.但是可以认为是工厂模式的一种特殊实现,并且在日常中使用广泛,所以还是值得我们去学习的. 定义简单工厂模式(Simple Factory Pattern): ...

  6. java中逻辑运气_一个基于运气的数据结构,你猜是啥?

    排行榜 懂行的老哥一看这个小标题,就知道我要以排行榜作为切入点,去讲 Redis 的 zset 了. 是的,经典面试题,请实现一个排行榜,大部分情况下就是在考验你知不知道 Redis 的 zset 结 ...

  7. 网易 java社招面试_一个妹子网易Java岗社招面试经历分享

    博客群发软件--用 Windows Live Writer完美发布新浪网易blogcnbl 博客群发软件--用 Windows Live Writer完美发布新浪.网易.blogcn.blogbus. ...

  8. java string最大长度_一个Java字符串中到底有多少个字符?

    作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...

  9. java超出gc开销_通过这5个简单的技巧减少GC开销

    java超出gc开销 编写代码的五种简单方法,可以提高内存效率,而无需花费更多时间或降低代码可读性 垃圾回收会为您的应用程序增加多少开销? 您可能不知道确切的数字,但您确实知道总有改进的余地. 尽管自 ...

最新文章

  1. 快速创建Angular组件并定义传参、绑定自定义事件的方法
  2. python中的方法需要定义_Python中规范定义命名空间的一些建议
  3. Entity Framework技巧系列之十一 - Tip 42 - 45
  4. 宜泊科技阿里云,加速智慧停车产业数字化发展
  5. RouterModule.forRoot 和 RouterModule.forChild 的区别
  6. leetcode 1202. 交换字符串中的元素(并查集)
  7. 阿里云@广东:让我们一起上云!
  8. 牛津大学最新调研:AI面临基准危机,NLP集中“攻关”推理测试
  9. linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...
  10. 主流Java微服务框架有哪些?-开课吧
  11. 尚学堂视频笔记三:容器
  12. C语言中宏定义函数的运算优先级问题
  13. 站内信设计文档及源代码下载
  14. ../和./和/的区别
  15. C语言练习题,编写程序实现以下功能。从键盘输入一个整数,若输入数字0,则屏幕显示:“Sunday“;若输入数字1,则屏幕显示:“Monday“;若输入数字2,则屏幕显示:“Tuesday“;若输入数字
  16. tabbar模板html,新闻手机模板,html模板,小程序模板,App模板
  17. Python爬虫系列(2)
  18. 《C语言程序设计》指针
  19. html5桌面系统,基于HTML5的IVI桌面系统及本地功能扩展研究实现
  20. 82.纯CSS液体加载特效

热门文章

  1. 如何pspice模型转成saber模型
  2. [Ajax] 案例 -- 三级联动
  3. 利用jsonp、iframe和location.hash解决跨域问题
  4. 【Vue】组件的创建以及 data methods 属性的使用
  5. LeetCode--27. 移除元素(双指针)
  6. 服务器系统怎么找便签,Win10电脑怎么找回便签记录?如何恢复误删的内容?
  7. input Type
  8. 取到小数后三位_小数名师工作室 数学实验 || 一个小数乘10、100、1000……的计算规律...
  9. 基于顺序存储结构的图书信息表的排序(C++)
  10. 光机学院计算机系,计算机系召开第十二届科技节闭幕式