java 板


LINE

小弟我最近开始练习写chat room程式 基本的传讯息, 收讯息都没有什麽大问题 可是问题来了, 我写的程式只能够支援英文和数字的传送 如果传送中文, 就会变成??这种乱码 以下是我用来读写socket的code 在伺服器端的程式码是: import java.io.*; import java.net.*; import java.util.*; public class myChatServer{ public static void main(String[] s){ new myChatServer().go(Integer.parseInt(s[0])); } ArrayList clientOutputStreams; /* this is use to QUIT the server */ class Controller implements Runnable{ BufferedReader reader; public void run(){ reader = new BufferedReader(new InputStreamReader(System.in)); while(true){ System.out.print("Please input youe command : "); try{ if(reader.readLine().equals("QUIT")) System.exit(0); }catch(Exception ex){ ; } } } } class ClientHandler implements Runnable{ BufferedReader reader; Socket sock; public ClientHandler(Socket clientSocket){ try{ sock = clientSocket; // read message form every client reader = new BufferedReader(new InputStreamReader(sock.getInputStream())); }catch(Exception ex){ ex.printStackTrace(); } } public void run(){ String message; try{ while((message = reader.readLine()) != null){ tellEveryone(message); } }catch(Exception ex){ ex.printStackTrace(); } } } // end of inclass public void go(int port){ Thread control = new Thread(new Controller()); control.start(); clientOutputStreams = new ArrayList(); try{ // create the server socket ServerSocket serverSock = new ServerSocket(port); while(true){ // will bock until new client connect Socket clientSocket = serverSock.accept(); // get the new client InputStream PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); writer.println("Welcome to join this chat room!!"); writer.println("Have a good time :)"); clientOutputStreams.add(writer); // each client we create a thread to handle Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); } }catch(Exception ex){ ex.printStackTrace(); } } public void tellEveryone(String message){ Iterator it = clientOutputStreams.iterator(); while(it.hasNext()){ try{ // send out the message PrintWriter writer = (PrintWriter)it.next(); writer.println(message); writer.flush(); }catch(Exception ex){ ex.printStackTrace(); } } } } 这是client的程式码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.net.*; public class myChatClient{ protected JFrame frame; protected JTextField nickName; protected JTextField serverAddr; protected JTextField serverPort; protected JButton button; protected JTextArea message; protected JTextArea typeIn; protected Socket socket = new Socket(); protected BufferedReader reader; protected PrintWriter writer; public static void main(String[] s){ // create the myChatClient Object myChatClient client = new myChatClient(); // client begin to run client.go(); } public void go(){ setupGUI(); setupEventListener(); } protected void setupEventListener(){ button.addActionListener(new buttonListener()); } /* we use button to connect and send message */ class buttonListener implements ActionListener{ public void actionPerformed(ActionEvent event){ if(socket.isConnected()){ String message = nickName.getText() + " > " + typeIn.getText(); try{ writer.println(message); writer.flush(); }catch(Exception ex){ ex.printStackTrace(); } typeIn.setText(""); typeIn.requestFocus(); }else{ connect(); /* cread a thread which use to receive message from server */ Thread readerThread = new Thread(new IncomingReader()); readerThread.start(); ((JButton)event.getSource()).setLabel("Send"); typeIn.setEditable(true); try{ writer.println(nickName.getText() + " has join this chat room"); writer.flush(); }catch(Exception ex){ ex.printStackTrace(); } } //set the thread to receive message from server } } protected void connect(){ try{ // create the socket which connect to server socket = new Socket(serverAddr.getText(), Integer.parseInt(serverPort.getText())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); }catch(IOException ex){ ex.printStackTrace(); } } /* here is just GUI */ protected void setupGUI(){ frame = new JFrame("myChat"); frame.setSize(600, 440); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel1 = new JPanel(); panel1.add(new JLabel("Nickname")); panel1.add(nickName = new JTextField(5)); panel1.add(new JLabel("Chat Room")); panel1.add(serverAddr = new JTextField(10)); panel1.add(new JLabel("Port Number")); panel1.add(serverPort = new JTextField(5)); frame.getContentPane().add(BorderLayout.NORTH, panel1); JPanel panel2 = new JPanel(); panel2.setBorder(BorderFactory.createTitledBorder("Message")); message = new JTextArea(14, 47); message.setLineWrap(true); message.setWrapStyleWord(true); message.setEditable(false); JScrollPane JScrollPane1 = new JScrollPane(message); JScrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); JScrollPane1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); panel2.add(JScrollPane1); frame.getContentPane().add(BorderLayout.CENTER, panel2); JPanel panel3 = new JPanel(); panel3.setLayout(new BoxLayout(panel3, BoxLayout.X_AXIS)); panel3.setBorder(BorderFactory.createTitledBorder("Your TypeIn")); typeIn = new JTextArea(5, 45); typeIn.setLineWrap(true); typeIn.setEditable(false); panel3.add(new JScrollPane(typeIn)); button = new JButton("Connect"); panel3.add(button); frame.getContentPane().add(BorderLayout.SOUTH, panel3); frame.setVisible(true); } class IncomingReader implements Runnable{ /* we append the received message in the TextArea */ public void run(){ try{ String newMessage; while((newMessage = reader.readLine()) != null){ message.append(newMessage + "\n"); } }catch(Exception ex){ ex.printStackTrace(); } } } } 谢谢各位大大指教<(__)> --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.243.43
1F:推 superlubu:设 UTF-8 为 charset, 看 InputStreamReader 和 06/03 15:19
2F:→ superlubu:PrintWriter 的 API 06/03 15:20
3F:→ king19880326:我试试看@@ 感谢感谢OTZ 06/03 15:27
4F:推 PsMonkey:你不要挑战作业文条款阿阿阿阿阿 06/03 16:33
5F:→ king19880326:这是我自己写的..也不是作业啊... 06/03 17:12
6F:推 Nipple5566:跟我的期末proj. 很像 06/03 20:19
7F:推 sunSimon:`朝圣 05/16 02:23







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP