package chatserver;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;public class Frame1 extends JFrame implements Runnable {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
TextArea textArea1 = new TextArea();
Panel panel1 = new Panel();
TextField textField1 = new TextField();
Button send = new Button();
Button quit = new Button();
ServerSocket serverSocket = null;
Socket socket = null;
BufferedReader cin = null;
PrintWriter cout = null;
/**Construct the frame*/
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setResizable(false);
this.setSize(new Dimension(372, 284));
this.setTitle("聊天程序--服务器端");
textField1.setColumns(15);
send.setEnabled(false);
send.setLabel("发送");
send.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
send_actionPerformed(e);
}
});
quit.setLabel("退出");
quit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
quit_actionPerformed(e);
}
});
textArea1.setEditable(false);
contentPane.add(textArea1, BorderLayout.CENTER);
contentPane.add(panel1, BorderLayout.SOUTH);
panel1.add(textField1, null);
panel1.add(send, null);
panel1.add(quit, null);
Thread thread = new Thread(this);
thread.start();
}
/**Overridden so we can exit when window is closed*/
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
quit();
}
}
public void run() {
try{
serverSocket = new ServerSocket(1124);
socket = serverSocket.accept();
cin = new BufferedReader (new InputStreamReader(socket.getInputStream()));
cout = new PrintWriter(socket.getOutputStream());
if (socket!= null){
textArea1.append("系统消息:客户端成功接入!\n");
send.setEnabled(true);
}
Receiver r = new Receiver();
Thread t = new Thread(r);
t.start();
}catch(Exception e){
textArea1.append(e.toString()+"\n");
}
} void quit_actionPerformed(ActionEvent e) {
quit();
} void send_actionPerformed(ActionEvent e) {
cout.println(textField1.getText());
cout.flush();
textArea1.append("服务器消息:"+textField1.getText()+"\n");
textField1.setText("");
} void quit(){
try{
cout.println("ServerExits!");
cout.flush();
}catch(Exception e){}
finally{
System.exit(0);
}
} private class Receiver implements Runnable{
public void run(){
String msg = null;
try{
msg = cin.readLine();
while(msg!= "ClientExits!"){
textArea1.append("客户端消息:"+msg+"\n");
msg = cin.readLine();
}
cin.close();
cout.close();
socket.close();
serverSocket.close();
}catch(Exception e){}
send.setEnabled(false); //客户端已退出,禁止发送消息
}
}
}
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;public class Frame1 extends JFrame implements Runnable {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
TextArea textArea1 = new TextArea();
Panel panel1 = new Panel();
TextField textField1 = new TextField();
Button send = new Button();
Button quit = new Button();
ServerSocket serverSocket = null;
Socket socket = null;
BufferedReader cin = null;
PrintWriter cout = null;
/**Construct the frame*/
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setResizable(false);
this.setSize(new Dimension(372, 284));
this.setTitle("聊天程序--服务器端");
textField1.setColumns(15);
send.setEnabled(false);
send.setLabel("发送");
send.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
send_actionPerformed(e);
}
});
quit.setLabel("退出");
quit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
quit_actionPerformed(e);
}
});
textArea1.setEditable(false);
contentPane.add(textArea1, BorderLayout.CENTER);
contentPane.add(panel1, BorderLayout.SOUTH);
panel1.add(textField1, null);
panel1.add(send, null);
panel1.add(quit, null);
Thread thread = new Thread(this);
thread.start();
}
/**Overridden so we can exit when window is closed*/
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
quit();
}
}
public void run() {
try{
serverSocket = new ServerSocket(1124);
socket = serverSocket.accept();
cin = new BufferedReader (new InputStreamReader(socket.getInputStream()));
cout = new PrintWriter(socket.getOutputStream());
if (socket!= null){
textArea1.append("系统消息:客户端成功接入!\n");
send.setEnabled(true);
}
Receiver r = new Receiver();
Thread t = new Thread(r);
t.start();
}catch(Exception e){
textArea1.append(e.toString()+"\n");
}
} void quit_actionPerformed(ActionEvent e) {
quit();
} void send_actionPerformed(ActionEvent e) {
cout.println(textField1.getText());
cout.flush();
textArea1.append("服务器消息:"+textField1.getText()+"\n");
textField1.setText("");
} void quit(){
try{
cout.println("ServerExits!");
cout.flush();
}catch(Exception e){}
finally{
System.exit(0);
}
} private class Receiver implements Runnable{
public void run(){
String msg = null;
try{
msg = cin.readLine();
while(msg!= "ClientExits!"){
textArea1.append("客户端消息:"+msg+"\n");
msg = cin.readLine();
}
cin.close();
cout.close();
socket.close();
serverSocket.close();
}catch(Exception e){}
send.setEnabled(false); //客户端已退出,禁止发送消息
}
}
}
解决方案 »
- 不好意思 菜鸟学习数据结构
- SSH ,org.objectweb.asm.ClassVisitor.visit异常
- jstl在jsp中的应用
- 关于myeclipse中去除Capability的问题
- Tomcat Manager 下点击自己建的工程文件夹显示 404 错误,请高手帮助
- 我在整合hibernate和spring之后测试出错
- 服务器是Tomcat5.0, 数据库mysql3.23. 驱动程序是mysql-connector-java-3.0.14-production. 怎样才能正确配置啊?
- 【请教】jbx+weblogic 配置编译工程问题
- jbuilder8+weblogic7该如何部署JSP+JAVABEAN呢,我的怎么经常出错
- Jboss 服务“数据库连接已关闭”
- 为什么有URLConnection连接servlet不成功?
- 为什么总说schema有错?
serverSocket serverSocket = new ServerSocket(1124);
用一个循环来监听端口
Socket socket = serverSocket.accept();
如果有信息,开一个处理线程(自己写)来处理,把socket传进去让他处理主线程继续
监听端口
Socket socket = serverSocket.accept();
try {
gServerSocket = new ServerSocket(piPortNo);
return (true);
} catch (UnknownHostException ex) {
gTcpStatus = gTcpHostErr;
throw new SysExcpt("TcpServer", "Connect()", ex.toString());
} catch (IOException ex) {
gTcpStatus = gTcpIOErr;
throw new SysExcpt("TcpServer", "Connect()", ex.toString());
} catch (Exception ex) {
gTcpStatus = gTcpFail;
throw new SysExcpt("TcpServer", "Connect()", ex.toString());
}
}
try
{
ServerSocket s=new ServerSocket(9999);
Socket socket=s.accept();
}
catch(Exception e)
{
{
客户端最少代码
try
{
Socket s=new Socket("IPAdderss",9999);
}
catch(Exception e)
{
}
这么写效率很低的,尤其是对于那些繁忙且需要实时响应的服务,最好写一个线程池。