Java简单的客户端与服务器的建立与通信
2012-08-26 00:04
375 查看
简述:
建立简单的server与client,在利用socket上通信
知识点:
1. java socket 通信
2. java GUI的几个控件
3. 多线程并发
代码:
SimpleChatServer.java
SimpleChatClient.java
输出:
建立简单的server与client,在利用socket上通信
知识点:
1. java socket 通信
2. java GUI的几个控件
3. 多线程并发
代码:
SimpleChatServer.java
package test.chatclient; import java.io.*; import java.net.*; import java.util.*; public class SimpleChatServer { ArrayList<PrintWriter> clientOutputStreams; public static void main(String[] args){ new SimpleChatServer().go(); } public class ClientHandler implements Runnable{ BufferedReader reader; Socket sock; public ClientHandler(Socket clientSocket){ try{ sock = clientSocket; InputStreamReader isReader = new InputStreamReader(sock.getInputStream()); reader = new BufferedReader(isReader); }catch(Exception ex){ ex.printStackTrace(); } } @Override public void run() { String message; try{ while((message = reader.readLine()) != null){ System.out.println("read " + message); tellEveryone(message); } }catch(Exception ex){ ex.printStackTrace(); } } } public void tellEveryone(String message){ Iterator<PrintWriter> it = clientOutputStreams.iterator(); while(it.hasNext()){ try{ PrintWriter writer = (PrintWriter)it.next(); writer.println(message); writer.flush(); }catch(Exception ex){ ex.printStackTrace(); } } } public void go(){ clientOutputStreams = new ArrayList<PrintWriter>(); try{ ServerSocket serverSock = new ServerSocket(5000); while(true){ Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); clientOutputStreams.add(writer); Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); System.out.println("got a connection"); } }catch(Exception ex){ ex.printStackTrace(); } } }
SimpleChatClient.java
package test.chatclient; import java.io.*; import java.net.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.JOptionPane; public class SimpleChatClient { JTextArea incoming; JTextField outgoing; BufferedReader reader; PrintWriter writer; Socket sock; static String clientName; public static void main(String[] args) { SimpleChatClient client = new SimpleChatClient(); clientName = JOptionPane.showInputDialog("Please input the client name :"); client.go(); } public void go() { // build GUI JFrame frame = new JFrame(clientName + "'s Chat Client"); JPanel mainPanel = new JPanel(); incoming = new JTextArea(15,20); incoming.setLineWrap(true); incoming.setWrapStyleWord(true); incoming.setEditable(false); JScrollPane qScroller = new JScrollPane(incoming); qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); outgoing = new JTextField(20); JButton sendButton = new JButton("Send"); sendButton.addActionListener(new SendButtonListener()); mainPanel.add(qScroller); mainPanel.add(outgoing); mainPanel.add(sendButton); setUpNetworking(); Thread readerThread = new Thread(new IncomingReader()); readerThread.start(); frame.getContentPane().add(BorderLayout.CENTER, mainPanel); frame.setSize(400,500); frame.setVisible(true); } // close go private void setUpNetworking() { try { sock = new Socket("127.0.0.1", 5000); InputStreamReader streamReader = new InputStreamReader(sock.getInputStream()); reader = new BufferedReader(streamReader); writer = new PrintWriter(sock.getOutputStream()); System.out.println("networking established"); } catch(IOException ex) { ex.printStackTrace(); } } // close setUpNetworking public class SendButtonListener implements ActionListener { public void actionPerformed(ActionEvent ev) { try { writer.println(clientName+" says:\n"+outgoing.getText()); writer.flush(); } catch(Exception ex) { ex.printStackTrace(); } outgoing.setText(""); outgoing.requestFocus(); } } // close SendButtonListener inner class public class IncomingReader implements Runnable { public void run() { String message = null; try { while ((message = reader.readLine()) != null) { System.out.println("read " + message); incoming.append(message + "\n"); } // close while } catch(Exception ex) {ex.printStackTrace();} } // close run } // close inner class }
输出:
相关文章推荐
- Java简单的客户端与服务器的建立与通信
- Java实现服务器和客户端简单通信
- java通信系列之一by_书訢:通信基础和简单服务器客户端创建
- Java通信之客户端的创建以及客户端和服务器的简单交互
- Java 利用套接字Socket实现简单的服务器与客户端通信
- Java 利用套接字Socket实现简单的服务器与客户端通信
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- android客户端与javaweb服务器端数据通信-Post-Json格式数据
- Python服务器与多种客户端(Python/Java/Android)之间的通信
- C# Socket简单例子(服务器与多个客户端通信)
- Java SSL 服务器 客户端通信 试用
- (转)C# Socket简单例子(服务器与客户端通信)
- Android开发之简单的聊天室(客户端与服务器进行通信)
- linux socket 编程一:简单的服务器和客户端通信
- Java SSL 服务器 客户端通信 试用
- Linux C实现简单的UDP服务器客户端通信
- 读JAVA网络编程精解--服务器与客户端通信一
- Android与JavaIO实现简单Echo服务器与客户端
- 数据通信之数据转码字节映射加密发送:客户端c++和服务器java
- C# Socket简单例子(服务器与客户端通信)