您的位置:首页 > 编程语言 > Java开发

Java Socket编程之多线程实现C/S一对多(服务端无法发送数据)

2014-01-06 16:35 525 查看
Server端:

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐