Java Socket编程之多线程实现C/S一对多(服务端无法发送数据)
2014-01-06 16:35
525 查看
Server端:
Client端:
main函数:
package com.wjy.server; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; /* * caution:boot the server first. * @author JiyuanWang * */ public class TalkServer extends JFrame implements ActionListener,Runnable{ private JButton send=null; private JTextField inputText=null; private JTextArea showText=null; private ServerSocket serverSocket=null; private DataOutputStream out=null; public TalkServer(){ } public void handle() { try { serverSocket=new ServerSocket(4170, 5); while (true) { Socket socket=serverSocket.accept(); showText.append("Connect successd.\n"); Thread thread=new ThreadHandle(socket); thread.start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub /*try { out.writeUTF(inputText.getText()); out.flush();//本人一直把这个程序调试不通,最后发现没加这句话导致服务端显示不了客户端的输入。 showText.append("I said: "+inputText.getText()+"\n"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }*/ } @Override public void run() { // TODO Auto-generated method stub send=new JButton("Send"); send.addActionListener(this); send.setEnabled(true); inputText=new JTextField(); showText=new JTextArea(); add(send,BorderLayout.NORTH); add(inputText, BorderLayout.SOUTH); add(showText, BorderLayout.CENTER); setTitle("Server"); setBounds(1000,0,400,400); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); handle(); } private class ThreadHandle extends Thread{ private Socket midSocket; public ThreadHandle(Socket midSocket){ this.midSocket=midSocket; } public void run() { try { DataInputStream dataInputStream=new DataInputStream(midSocket.getInputStream()); DataOutputStream dataOutputStream=new DataOutputStream(midSocket.getOutputStream()); while(true){ showText.append("Client said: "+dataInputStream.readUTF()+"\n"); } } catch (Exception e) { // TODO: handle exception } } } }
Client端:
package com.wjy.client; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; /** * caution:boot the server first. * @author JiyuanWang * */ public class TalkClient extends JFrame implements ActionListener,Runnable{ private JButton send=null; private JTextField inputText=null; private JTextArea showText=null; private Socket socket=null; private DataInputStream inputStreamReader=null; private DataOutputStream outputStreamWriter=null; public TalkClient(){ } public void handle() { try { socket=new Socket("127.0.0.1",4170); inputStreamReader=new DataInputStream(socket.getInputStream()); outputStreamWriter=new DataOutputStream(socket.getOutputStream()); while(true){ showText.append("The Server said: "+inputStreamReader.readUTF()+"\n"); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub try { outputStreamWriter.writeUTF(inputText.getText()); outputStreamWriter.flush(); //本人一直把这个程序调试不通,最后发现没加这句话导致服务端显示不了客户端的输入。 showText.append("I said: "+inputText.getText()+"\n"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } @Override public void run() { // TODO Auto-generated method stub send=new JButton("Send"); send.addActionListener(this); send.setEnabled(true); inputText=new JTextField(); showText=new JTextArea(); add(send,BorderLayout.NORTH); add(inputText, BorderLayout.SOUTH); add(showText, BorderLayout.CENTER); setTitle("Client"); setBounds(0,0,400,400); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); handle(); } }
main函数:
package start; import java.io.IOException; import java.net.ServerSocket; import com.wjy.client.TalkClient; import com.wjy.server.TalkServer; public class start { public static void main(String[] args){ Thread server=new Thread(new TalkServer()); Thread clientA=new Thread(new TalkClient()); Thread clientB=new Thread(new TalkClient()); server.start(); clientA.start(); clientB.start(); } }
相关文章推荐
- Java Socket编程之多线程实现C/S一对多(服务端无法发送数据)
- {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习
- 《java入门第一季》之tcp协议下的编程实现键盘录入数据不断地往服务器端发送数据案例
- 《java入门第一季》之tcp协议下的编程实现键盘录入数据不断地往服务器端发送数据案例
- 用Java语言中的socket编程实现jsp页面与网关的链接并且不间断发送控制数据
- 通过网络编程、文件IO、多线程,实现客户端和服务端对话。
- 使用AIDL实现IPC通信之——实现服务端主动发送数据给客户端
- 网络编程(15)—— 实现利用管道保存客户端数据的socket服务端
- java Socket编程--多线程实现为多个客户端服务
- 使用netty进行服务端网络编程及数据高效分发功能实现
- httpmime-4.1.3.jar和httpmime-4.3.6.jar 发送的http请求有差异,导致服务端无法接收到数据。
- 配置agent向服务端发送数据,并实现监控功能
- HELP,多线程通过同一个socket发送数据到服务端,socket底动会不会同步呢?
- Java Socket实现客户端服务端相互发送文本
- socket编程,实现简单的客户端服务器端发送数据
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换
- java socket编程,多线程,客户端服务端
- Scoket异步套接字编程,在客户端实现数据的发送和接收
- 数据报实现简单的客户端发送数据,服务端接收数据
- C# iocp通讯客户端只能发送数据,无法接收服务端发送的数据