Java socket長串連代碼實現

來源:互聯網
上載者:User

標籤:java.net   dac   disco   closed   location   keyword   print   extends   meta   

伺服器端程式:

import java.io.*;import java.net.*;import java.util.*;public class ChatServer {boolean started = false;ServerSocket ss = null;List<Client> clients = new ArrayList<Client>();public static void main(String[] args) {new ChatServer().start();}public void start() {try {ss = new ServerSocket(8888);started = true;System.out.println("連接埠已開啟,佔用8888連接埠號碼....");} catch (BindException e) {System.out.println("連接埠使用中....");System.out.println("請關掉相關程式並重新運行伺服器!");System.exit(0);} catch (IOException e) {e.printStackTrace();}try {while (started) {Socket s = ss.accept();Client c = new Client(s);System.out.println("a client connected!");new Thread(c).start();clients.add(c);}} catch (IOException e) {e.printStackTrace();} finally {try {ss.close();} catch (IOException e) {e.printStackTrace();}}}class Client implements Runnable {private Socket s;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean bConnected = false;public Client(Socket s) {this.s = s;try {dis = new DataInputStream(s.getInputStream());dos = new DataOutputStream(s.getOutputStream());bConnected = true;} catch (IOException e) {e.printStackTrace();}}public void send(String str) {try {dos.writeUTF(str);} catch (IOException e) {clients.remove(this);System.out.println("對方退出了!我從List裡面去掉了!");}}public void run() {try {while (bConnected) {String str = dis.readUTF();System.out.println("------------來自本機伺服器:" + str);for (int i = 0; i < clients.size(); i++) {Client c = clients.get(i);c.send(str);}}} catch (EOFException e) {System.out.println("Client closed!");} catch (IOException e) {e.printStackTrace();} finally {try {if (dis != null)dis.close();if (dos != null)dos.close();if (s != null) {s.close();}} catch (IOException e1) {e1.printStackTrace();}}}}}

用戶端程式:

import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;/** * @author Michael Huang *  */public class ChatClient extends Frame {Socket s = null;DataOutputStream dos = null;DataInputStream dis = null;private boolean bConnected = false;TextField tfTxt = new TextField();TextArea taContent = new TextArea();Thread tRecv = new Thread(new RecvThread());public static void main(String[] args) {new ChatClient().launchFrame(8888);}public void launchFrame(int port) {setLocation(400, 300);this.setSize(300, 300);add(tfTxt, BorderLayout.SOUTH);add(taContent, BorderLayout.NORTH);pack();this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent arg0) {disconnect();System.exit(0);}});tfTxt.addActionListener(new TFListener());setVisible(true);connect(port);tRecv.start();}public void connect(int port) {try {s = new Socket("127.0.0.1", port);dos = new DataOutputStream(s.getOutputStream());dis = new DataInputStream(s.getInputStream());System.out.println("~~~~~~~~串連成功~~~~~~~~!");bConnected = true;} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void disconnect() {try {dos.close();dis.close();s.close();} catch (IOException e) {e.printStackTrace();}}private class TFListener implements ActionListener {public void actionPerformed(ActionEvent e) {String str = tfTxt.getText().trim();tfTxt.setText("");try {dos.writeUTF(str);dos.flush();} catch (IOException e1) {e1.printStackTrace();}}}private class RecvThread implements Runnable {public void run() {try {while (bConnected) {String str = dis.readUTF();taContent.setText(taContent.getText() + str + ‘\n‘);}} catch (SocketException e) {System.out.println("退出了,bye!");} catch (EOFException e) {System.out.println("退出了,bye!");} catch (IOException e) {e.printStackTrace();}}}}

Java socket長串連代碼實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.