如何用Java 实现 QQ Server 和Client之间的通信

[复制链接]
查看11 | 回复1 | 2009-7-29 10:14:19 | 显示全部楼层 |阅读模式
客户端:package Client;import java.io.*;import java.net.Socket;import java.net.UnknownHostException;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Date;public class TalkClient implements Runnable{ InputStream in = null; OutputStream out = null; DataInputStream dis; DataOutputStream dos; BufferedWriter writeFile; FileInputStream readFile; FileOutputStream fin; File file; Socket socket; String s; ChatFrame cf; public TalkClient(ChatFrame cf){try { socket = new Socket("localhost",5888); in = socket.getInputStream(); out = socket.getOutputStream(); dis = new DataInputStream(in); dos = new DataOutputStream(out); this.cf = cf; file = new File("d:/log/"+cf.user+".txt"); writeFile = new BufferedWriter(new OutputStreamWriter((new FileOutputStream(file,true))));
if(!file.exists()){
file.createNewFile();
}} catch (UnknownHostException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();} }public void run() {try {
while(true){
if((s = dis.readUTF())!= null){
writeFile.write(s);
writeFile.flush();
cf.display.setText(cf.display.getText()+s);
}
cf.display.setText(cf.display.getText());
}} catch (FileNotFoundException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}}public void sender(ChatFrame cf){try { dos.writeUTF(s = ("("+new Date()+") \n"+cf.user+":"+cf.chat.getText())+"\n"); dos.flush(); writeFile.write(s); writeFile.flush(); cf.display.setText(cf.display.getText()+s); cf.chat.setText("");} catch (IOException e) { e.printStackTrace();} }}服务器端:package Server;import java.io.*;import java.net.*;import java.util.Date;import Client.Erorr;public class TalkServer { public static final int PORT = 5888; ServerSocket socketServer;
Socket socket;
InputStream in;
OutputStream out;
DataInputStream dis;
DataOutputStream dos;
String s = null;
public TalkServer(){
try { socketServer = new ServerSocket(PORT); socket = socketServer.accept(); in = socket.getInputStream(); out = socket.getOutputStream(); dis = new DataInputStream(in); dos = new DataOutputStream(out);} catch (IOException e) { e.printStackTrace();}
}
public void start(ServerFrame sf){ try {
while(true){
if((s=dis.readUTF())!= null){
sf.display.setText(sf.display.getText()+s);
}
sf.display.setText(sf.display.getText());
} } catch (IOException e) {
e.printStackTrace(); }
}
public void sender(ServerFrame sf){
try { dos.writeUTF(s = ("("+new Date()+") \n"+"Server"+":"+sf.chat.getText()+"\n")); sf.display.setText(sf.display.getText() + s); sf.chat.setText(""); } catch (IOException e) { //new Erorr();}
}}上面的代码段是我写的一个简易模拟QQ通信程序的核心部分,也就是Server端和Socket端得通信部分,整个程序还涉及Java Swing编程界面的实现和数据库的操作,上例中也有部分变量和形参是界面对象或整个项目中其他类的引用。不过希望这两段核心部分的Socket代码对你有帮助。
回复

使用道具 举报

千问 | 2009-7-29 10:14:19 | 显示全部楼层
Socket编程谢谢到网上搜索下多的是想上面这位仁兄就是在网上随便搜索的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行