[java]代码库
//GUI布局及主函数
package cn.itcast.TCPDemo2;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class ChatGui {
private Frame f;
private TextArea read,write;
private Button b;
public ChatGui() {
init();
}
public void init(){
f=new Frame("TCP");
f.setBounds(300, 100, 430, 500);
f.setLayout(new FlowLayout());
read=new TextArea(18,50);
write=new TextArea(7,50);
read.setEditable(false);
b=new Button("发送");
f.add(read);
f.add(write);
f.add(b);
f.setVisible(true);
event();
}
public void event(){
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mothed();
}
});
//键盘事件暂不可用,待维护
/*b.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if (e.isShiftDown()&&(e.getKeyCode()==e.VK_ENTER)){
mothed();
}
}
});*/
}
public void mothed(){
try {
Socket s=new Socket("127.0.0.1",10002);
new Thread(new TcpClient(s, write.getText())).start();
write.setText("");
} catch (Exception e1) {
// TODO Auto-generated catch block
new RuntimeException();
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ChatGui cg=new ChatGui();
ServerSocket ss=new ServerSocket(10002);
new Thread(new TcpServer(ss, cg.read)).start();
}
}
//客户端代码
package cn.itcast.TCPDemo2;
import java.awt.TextArea;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
public class TcpClient implements Runnable {
private Socket s;
private String text;
TcpClient(Socket s,String text){
this.s=s;
this.text=text;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
if(text!=""){
pw.println(text);
}
} catch (IOException e) {
new RuntimeException();
}
}
}
//服务端代码
package cn.itcast.TCPDemo2;
import java.awt.TextArea;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import javax.xml.soap.Text;
public class TcpServer implements Runnable {
private ServerSocket ss;
private TextArea ta;
TcpServer(ServerSocket ss,TextArea ta){
this.ss=ss;
this.ta=ta;
}
public void run() {
while(true){
try {
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
InputStreamReader bfr=
new InputStreamReader(s.getInputStream());
//假如此处代码为一下,则每次发送的只能是第一行,换行后将无法显示
/*
String line=null;
if((line=bfr.readLine()).length()>0){
ta.append("("+ip+")"+" "+Tool.time()+"\r\n"+line+"\r\n\r\n");
}*/
int num=0;
char[] buf=new char[1024];
if((num=bfr.read(buf))>0){
ta.append("("+ip+")"+" "+Tool.time()+"\r\n"+new String(buf,0,num)+"\r\n\r\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
new RuntimeException();
}
}
}
}
//工具类使用,时间
package cn.itcast.TCPDemo2;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Tool {
public static String time(){
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(d);
}
}
[源代码打包下载]