scoket通信,要求一个服务器和两个客户端

问题描述

//【例10.2】采用Socket通信实现的聊天室程序。//①聊天室的图形用户界面程序importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;publicclassChatJFrameextendsJFrameimplementsActionListener{privateJTextAreatext_receiver;//显示对话内容的文本区privateJTextFieldtext_sender;//输入发送内容的文本行privatePrintWritercout;//字符输出流对象privateStringname;//网名publicChatJFrame(Stringname,Stringtitle,PrintWritercout)//构造方法{super("聊天室"+name+""+title);this.setSize(320,240);this.setLocation(300,240);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.text_receiver=newJTextArea();this.text_receiver.setEditable(false);//不可编辑this.add(this.text_receiver);JPanelpanel=newJPanel();this.add(panel,"South");this.text_sender=newJTextField(12);panel.add(this.text_sender);this.text_sender.addActionListener(this);//注册单击事件监听器JButtonbutton_send=newJButton("发送");panel.add(button_send);button_send.addActionListener(this);JButtonbutton_leave=newJButton("离线");panel.add(button_leave);button_leave.addActionListener(this);this.setVisible(true);this.setWriter(cout);this.name=name;}publicChatJFrame(){this("","",null);}publicvoidsetWriter(PrintWritercout)//设置字符输出流对象{this.cout=cout;//②Socket通信中的服务端程序importjava.net.*;importjava.io.*;publicclassChatServerSocket{privateChatJFramechatframe;//聊天室的图形用户界面privateServerSocketserver;//提供TCP连接服务的ServerSocket对象privateSocketclient;//与客户端通信的Socket对象publicChatServerSocket(intport,Stringname)//约定端口号、网名{try{server=newServerSocket(port);//创建ServerSocket对象,提供TCP连接服务client=server.accept();//等待接收一个客户端的连接申请//连接成功后返回一个已连接的Socket对象BufferedReadercin=newBufferedReader(newInputStreamReader(client.getInputStream()));//获得Socket对象的输入流,创建字符输入流PrintWritercout=newPrintWriter(client.getOutputStream(),true);//获得Socket对象的输出流,创建字符输出流chatframe=newChatJFrame(name,"服务端端口"+port,cout);//创建聊天室的图形用户界面chatframe.receive("连接"+cin.readLine());//接收并显示已连接的对方网名cout.println(name);//将自己网名发送给对方Stringaline="";do//从输入流接收对方发来的字符串{aline=cin.readLine();//读取一行字符串,输入流结束时返回nullif(aline!=null&&!aline.equals("bye"))//"bye"是约定离线信息chatframe.receive(aline);}while(aline!=null&&!aline.equals("bye"));chatframe.setWriter(null);//设置聊天室界面的输出流对象为空cin.close();cout.close();client.close();//关闭Socket连接server.close();//停止等候客户端的连接请求}catch(IOExceptione){}}publicstaticvoidmain(Stringargs[]){newChatServerSocket(2001,"花仙子");//约定端口号,指定网名}}//③Socket通信中的客户端程序importjava.net.*;importjava.io.*;publicclassChatSocket{privateChatJFramechatframe;//聊天室的图形用户界面privateSocketclient;//客户端Socket对象publicChatSocket(Stringhost,intport,Stringname)//主机名、端口号、网名{try{client=newSocket(host,port);//创建一个Socket对象时向指定主机的端口发出TCP连接请求BufferedReadercin=newBufferedReader(newInputStreamReader(client.getInputStream()));//获得Socket对象的输入流,创建字符输入流PrintWritercout=newPrintWriter(client.getOutputStream(),true);//获得Socket对象的输出流,创建字符输出流chatframe=newChatJFrame(name,"客户端主机"+host+"端口"+port,cout);//创建聊天室的图形用户界面cout.println(name);//将自己网名发送给对方chatframe.receive("连接"+cin.readLine());//接收并显示已连接的对方网名Stringaline="";do//从输入流接收对方发来的字符串{aline=cin.readLine();if(aline!=null&&!aline.equals("bye"))//"bye"是约定的离线信息chatframe.receive(aline);}while(aline!=null&&!aline.equals("bye"));chatframe.setWriter(null);//设置聊天室界面的输出流对象为空cin.close();cout.close();client.close();//关闭Socket连接}catch(IOExceptione){}}publicstaticvoidmain(Stringargs[]){newChatSocket("localhost",2001,"小蜜蜂");//指定主机和端口号,指定网名}}问题:要求在此基础上在加入一个客服端。修改例10.2聊天室程序,增加以下功能:增加上线功能。离线后,将【离线】按钮变成【上线】,单击可再次申请建立连接。将文本区中对方和己方的字符串以不同的字体区别显示。发送带格式的字符串。增加复制功能,将文本区中的若干选中字符串复制到文本行中。增加若干图标作为表情,发送表情图标。那位仁兄帮帮忙啊

解决方案

解决方案二:
赤祼祼地求代码!
解决方案三:
http://download.csdn.net/source/2057824这里或许有你要的代码
解决方案四:
要代码没有!可以给你些思路增加上线功能。离线后,将【离线】按钮变成【上线】,单击可再次申请建立连接。连接断开后,将button按钮的显示字符串改掉即可.推荐采用boolean(int也可以)表示离线和上线的两种状态,但处于离线状态的时候,可以干什么,处于上线状态的时候,可以干什么.将文本区中对方和己方的字符串以不同的字体区别显示。给每个client加一个ID,发消息包的时候将ID含在其中发出去,那么收到包时先判断ID是否为自己,不为自己就换个颜色显示在文本域中发送带格式的字符串。将字符串的格式信息加在包中,解析的时候多解析下.增加复制功能,将文本区中的若干选中字符串复制到文本行中。windows的复制功能不够用么?要复制几行就从文本区中读几行出来然后保存在字符串数组里面就可以了.增加若干图标作为表情,发送表情图标。增加表情库,一个字符串代码对应一个表情(类似于QQ的"/cy"表示笑脸这种)---当然实际上该字符串代码指向的是表情文件存放路径.然后在解析显示的时候,显示的是该路径所放置的图片.
解决方案五:
我是来看火龙果的
解决方案六:
引用3楼xiesisi3的回复:

要代码没有!可以给你些思路增加上线功能。离线后,将【离线】按钮变成【上线】,单击可再次申请建立连接。连接断开后,将button按钮的显示字符串改掉即可.推荐采用boolean(int也可以)表示离线和上线的两种状态,但处于离线状态的时候,可以干什么,处于上线状态的时候,可以干什么.将文本区中对方和己方的字符串以不同的字体区别显示。给每个client加一个ID,发消息包的时……

已经写的很明白了

时间: 2024-10-25 02:37:14

scoket通信,要求一个服务器和两个客户端的相关文章

ip-一个服务器,两个网站对应两个端口,如何做域名绑定?

问题描述 一个服务器,两个网站对应两个端口,如何做域名绑定? 我们的阿里云服务器上已经有一个网站A(IIS上的).网站A使用80端口,网址为a.xxx.com 现在有另一个网站B(Tomcat建的),网站B使用端口8088,我们希望该网站网址为b.xxx.com. 那么应该如何设置? 两个子域名都是对应同一个IP,只是端口号不一样 解决方案 域名的dns绑定的时候绑定不同的端口就行了 解决方案二: b.xxx.com可以直接绑定到iis,而不是tomcat..要不80端口只能一个程序占用

vpn 单向ping通-vpn连接好后,客户端可以ping通服务器,服务器无法ping通客户端。

问题描述 vpn连接好后,客户端可以ping通服务器,服务器无法ping通客户端. 下载的openvpn软件,连接校内机房局域网内的两台机器,vpn显示连接成功,可是客户端可以ping通服务器,服务器无法ping通客户端. 但是用机房自带的局域网172.29.137.*可以互相ping通,用vpn分配的ip无法互相ping通,服务器的ip是10.0.0.1,客户端的是10.0.0.10. 另一个问题是,客户端的ip好像是服务器随机分配的,我是申请了2个客户端,但是我试过几次,除了第一次外,服务器

socket通信-用vc写一个socket程序 实现两个客户端通过一个服务器的对话

问题描述 用vc写一个socket程序 实现两个客户端通过一个服务器的对话 初学socket 求详细教程,最好有C++源码 感激不尽 解决方案 孙鑫的VC视频教程中就有这样的例子程序,可以参考一下.

请问下,那种服务器可以实现两个客户端的即时通信功能?

问题描述 请问下,那种服务器可以实现两个客户端的即时通信功能? 现在有一个需求: a客户端发送一个请求到服务器,服务器按需分配给另外多个b客户端.这些客户端根据需要反馈信息,经过服务器发送给客户端. a客户端做出反馈经过服务器给b端.. 听我们经理说是用websorcket做.具体是怎么实现.具体什么流程. 为保证客户体验,服务器的反馈时间不能太长.. 解决方案 websorcket适合客户端是浏览器的场合.一般的客户端用socket就可以了.socket/websocket都是双向通讯,所以不

java-急求Java socket编程实现两个客户端通信通过服务器转发不要图形界面不用连接数据库

问题描述 急求Java socket编程实现两个客户端通信通过服务器转发不要图形界面不用连接数据库 实现两个客户端通信通过服务器转发不要图形界面不用连接数据库 求源码 解决方案 通过服务器,也就是说各个客户端与服务器要正常通讯,这是最基本的要求.这个要求应该不难吧,网上有很多类似的代码,如Android Socket 编程(WIFI 和 ADB),这是我在 CSDN 博客中的一篇文章,希望对你有帮助. 然后呢,做协议,当服务器接收到数据满足一定的格式.或所有数据,都转发到另一端. 解决方案二:

java 网络通信-我做了一个socket通信程序,服务器是server,用户是client

问题描述 我做了一个socket通信程序,服务器是server,用户是client 但是我同学运行用户程序,我运行服务器程序,却连接不上,为什么呢?具体代码如下 服务器程序: import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import j

用swiften写一个服务器与客户端通信的列子

问题描述 用swiften写一个服务器与客户端通信的列子 用swiften库写一个服务器与客户端通信的列子,有服务器和客户端,能进行简单的通信

有一个WEB服务器,两个客户同时操作JSP页面,一个删除一条数据,一个正好查询这条数据,报错了,怎么解决啊,急!!

问题描述 有一个WEB服务器,两个客户同时操作JSP页面,一个删除一条数据,一个正好查询这条数据,报错了,怎么解决啊,急!! 解决方案 解决方案二:引用楼主duobiao的回复: 有一个WEB服务器,两个客户同时操作JSP页面,一个删除一条数据,一个正好查询这条数据,报错了,怎么解决啊,急!! ......怎么会出错呢难道你做什么都不判断么?解决方案三:报啥错?解决方案四:一句话问题!不知道你是用什么做的,操作数据库用的是什么,数据库用的是什么,反正要有的什么都没有!解决方案五:引用2楼swan

如何用C++编写一个服务器和用户之间的共享内存管理程序

问题描述 如何用C++编写一个服务器和用户之间的共享内存管理程序 主要的功能就是建立一个服务器,新建两个容器,一个用来存放用户的ID(对应内存),插入操作之后遍历,看是否插入成功:一个用于服务器存放这些ID:在用户插入成功后服务器将他拷贝到这里,然后遍历,看是否插入成功:然后出现查内存进行标记. 要用到stl,共享内存,多线程这块. 请各位大大给点意见啊,谢谢.:) 完美解决的小弟会意思意思的. 解决方案 这些信息都可以放到服务器,用STL的map等来维护 解决方案二: 首先你要定义一个服务器与