import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.io.IOException;
import java.util.*;
class ServerDemo{
public static void main(String[] args){
int sPort;
ServerSocket sSocket=null;
Socket cSocket=null; try{
sPort=6000; //设置服务器的端口号
sSocket=new ServerSocket(sPort); //创建监听ServerSocket套接字
while(true){
cSocket=sSocket.accept();
ServerThread aa=new ServerThread(cSocket);
Thread r=new Thread(aa);
r.start(); } }catch(IOException e){
System.out.println("套接字、输入输出流创建失败或网络IO出现错误."); }
}
}class ServerThread implements Runnable
{
PrintStream writer=null; //发送消息
Scanner in=null;//接收消息
Socket socket;
Scanner in2=null;
ServerThread(Socket socket)
{
this.socket=socket;
} public void run()
{
try{
in=new Scanner(socket.getInputStream());
writer=new PrintStream(socket.getOutputStream());
String msg=in.nextLine();
writer.println("welcome");
while(true)
{
if(msg.equals("bye")) break;
System.out.println(msg);
in2=new Scanner(System.in);
writer.println(in2);
}
}catch(Exception e){}
}
}这个是服务器端,不用线程时,可以与客户端通信. 我想可以响应多个用户,可是用多线程以后,,消息直接不能传了.是线程写错了吗?
哪位帮忙看一下.谢谢/.下面是客户端.import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.io.IOException;
class ClientDemo{
public static void main(String[] args){
int serverPort;
String serverHost;
Socket cSocket=null;
BufferedReader reader=null;
PrintStream writer=null;
String receiveMsg;
String msg="This is the message from the client.";
try{
serverPort=6000;
serverHost="127.0.0.1";
cSocket=new Socket(serverHost,serverPort);
reader=new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
writer=new PrintStream(cSocket.getOutputStream());
//先接收服务器发送过来的Hello信息
receiveMsg=reader.readLine();
System.out.println(receiveMsg);
//再向服务器发送信息
writer.println(msg);
//关闭套接字,然后退出.
reader.close();
writer.close();
cSocket.close();
}
catch(IOException e){
System.out.println("创建套接字、输入输出流或网络IO出错:"+e);
try{
if(reader!=null) reader.close();
if(writer!=null) writer.close();
if(cSocket!=null) cSocket.close();
}catch(IOException e2){}
}
}
}
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.io.IOException;
import java.util.*;
class ServerDemo{
public static void main(String[] args){
int sPort;
ServerSocket sSocket=null;
Socket cSocket=null; try{
sPort=6000; //设置服务器的端口号
sSocket=new ServerSocket(sPort); //创建监听ServerSocket套接字
while(true){
cSocket=sSocket.accept();
ServerThread aa=new ServerThread(cSocket);
Thread r=new Thread(aa);
r.start(); } }catch(IOException e){
System.out.println("套接字、输入输出流创建失败或网络IO出现错误."); }
}
}class ServerThread implements Runnable
{
PrintStream writer=null; //发送消息
Scanner in=null;//接收消息
Socket socket;
Scanner in2=null;
ServerThread(Socket socket)
{
this.socket=socket;
} public void run()
{
try{
in=new Scanner(socket.getInputStream());
writer=new PrintStream(socket.getOutputStream());
String msg=in.nextLine();
writer.println("welcome");
while(true)
{
if(msg.equals("bye")) break;
System.out.println(msg);
in2=new Scanner(System.in);
writer.println(in2);
}
}catch(Exception e){}
}
}这个是服务器端,不用线程时,可以与客户端通信. 我想可以响应多个用户,可是用多线程以后,,消息直接不能传了.是线程写错了吗?
哪位帮忙看一下.谢谢/.下面是客户端.import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.io.IOException;
class ClientDemo{
public static void main(String[] args){
int serverPort;
String serverHost;
Socket cSocket=null;
BufferedReader reader=null;
PrintStream writer=null;
String receiveMsg;
String msg="This is the message from the client.";
try{
serverPort=6000;
serverHost="127.0.0.1";
cSocket=new Socket(serverHost,serverPort);
reader=new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
writer=new PrintStream(cSocket.getOutputStream());
//先接收服务器发送过来的Hello信息
receiveMsg=reader.readLine();
System.out.println(receiveMsg);
//再向服务器发送信息
writer.println(msg);
//关闭套接字,然后退出.
reader.close();
writer.close();
cSocket.close();
}
catch(IOException e){
System.out.println("创建套接字、输入输出流或网络IO出错:"+e);
try{
if(reader!=null) reader.close();
if(writer!=null) writer.close();
if(cSocket!=null) cSocket.close();
}catch(IOException e2){}
}
}
}
客户端:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;public class ChatClient extends Frame {
Socket s = null;
DataOutputStream dos = null; TextField tfTxt = new TextField(); TextArea taContent = new TextArea(); public static void main(String[] args) {
new ChatClient().launchFrame();
} public void launchFrame() {
setLocation(400, 300);
this.setSize(300, 300);
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() { @Override
public void windowClosing(WindowEvent arg0) {
disconnect();
System.exit(0);
}
});
tfTxt.addActionListener(new TFListener());
setVisible(true);
connect();
}
public void connect() {
try {
s = new Socket("127.0.0.1", 8888);
dos = new DataOutputStream(s.getOutputStream());
System.out.println("connected!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() {
try {
dos.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class TFListener implements ActionListener { public void actionPerformed(ActionEvent e) {
String str = tfTxt.getText().trim();
taContent.setText(str);
tfTxt.setText("");
try {
//System.out.println(s);
dos.writeUTF(str);
dos.flush();
//dos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}}服务端:
import java.io.*;
import java.net.*;public class ChatServer {
boolean started = false;
ServerSocket ss = null;
public static void main(String[] args) {
new ChatServer().start();
}
public void start() {
try {
ss = new ServerSocket(8888);
started = true;
} 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();
//dis.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Client implements Runnable {
private Socket s;
private DataInputStream dis = null;
private boolean bConnected = false;
public Client(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
bConnected = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
System.out.println(str);
}
} catch (EOFException e) {
System.out.println("Client closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(dis != null) dis.close();
if(s != null) s.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}