您的位置:首页 > 其它

一个简单的server和client程序

2013-10-23 17:34 447 查看
import java.io.*;//服务器端程序

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.util.*;

import java.text.*;

public class ChatServer{

class B implements Runnable{

public void run(){

while(true){

try{

t1.append(in.readUTF()+"\n");

t1.setCaretPosition(t1.getText().length());

}catch(Exception e){e.printStackTrace();}

}

}

}

JTextArea t1;

JTextArea t2;

private JFrame f;

private JOptionPane jop;

private ServerSocket ss;

private Socket socket;

private DataInputStream in;

private DataOutputStream out;

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

//设置日期格式

public ChatServer(){

try{

ss=new ServerSocket(9999);

socket=ss.accept();

in=new DataInputStream(socket.getInputStream());

out=new DataOutputStream(socket.getOutputStream());

}catch(Exception e){e.printStackTrace();}

f=new JFrame("服务器端程序");

ImageIcon icon=new ImageIcon("信纸背景1.png");

JLabel label=new JLabel(icon);//给标签加上图片

label.setBounds(0,0,icon.getIconWidth(),icon.getIconHeight());

//设置标签大小即为图片大小

JPanel p1=(JPanel)f.getContentPane();

//把内容窗格转化为JPanel

p1.setLayout(null);

//设置p1的布局为空

p1.setOpaque(false);

//把p1设置透明,以显示图片

f.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));

//把图片添加到分层窗口的最底层

t1=new JTextArea(60,40);

t1.setLineWrap(true);

t2=new JTextArea(10,20);

t2.setLineWrap(true);

JScrollPane jsp1=new JScrollPane(t1);

JScrollPane jsp2=new JScrollPane(t2);

JButton send=new JButton("发 送");

JButton clear=new JButton("清 空");

t1.setOpaque(false);

t2.setOpaque(false);//设置文本域透明

jsp1.setOpaque(false);

jsp1.getViewport().setOpaque(false);

jsp2.setOpaque(false);

jsp2.getViewport().setOpaque(false);

//把滚动条设置为透明

jsp1.setBounds(0,0,453,465);

jsp2.setBounds(0,465,453,115);

send.setBounds(150,580,100,40);

clear.setBounds(250,580,100,40);

//通过绝对布局给组件布局

Font font=new Font("楷体",Font.PLAIN,16);

t1.setFont(font);

t2.setFont(font);//设置字体

send.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

try{

String s1=null;

s1=t2.getText();

t2.setText(" ");

System.out.println(s1);

//t1.append(in.readUTF()+"\n");

t1.append(df.format(new Date())+" Server:"+"\n"+s1+"\n");

out.writeUTF(df.format(new Date())+" Server:"+"\n"+s1);

t1.setCaretPosition(t1.getText().length());

}catch(Exception ce){ce.printStackTrace();}

}

});

p1.add(jsp1);

p1.add(jsp2);

p1.add(send);

p1.add(clear);

f.setSize(460,656);

f.setLocation(500,400);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

B b=new B();

Thread k=new Thread(b);

k.start();

// k.sleep(2000);

}

public static void main(String[] args){

new ChatServer();

}

}

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.util.*;

import java.text.*;

public class ChatClient{//客户端程序

class A implements Runnable{

public void run(){

while(true){

try{

t1.append(in.readUTF()+"\n");

t1.setCaretPosition(t1.getText().length());

//通过改变文本插入符,把每次聊天的最新内容显示出来

}catch(Exception e){e.printStackTrace();}

}

}

}

private JTextArea t1;

private JTextArea t2;

private JFrame f;

private JOptionPane jop;

private Socket socket;

private DataInputStream in;

private DataOutputStream out;

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

//设置日期格式

String s=null;

public ChatClient(){

try{

socket=new Socket("192.168.24.44",9999);

in=new DataInputStream(socket.getInputStream());

out=new DataOutputStream(socket.getOutputStream());

}catch(Exception e){e.printStackTrace();}

f=new JFrame("客户端程序");

ImageIcon icon=new ImageIcon("信纸背景1.png");

JLabel label=new JLabel(icon);//给标签加上图片

label.setBounds(0,0,icon.getIconWidth(),icon.getIconHeight());

//设置标签大小即为图片大小

JPanel p1=(JPanel)f.getContentPane();

//把内容窗格转化为JPanel

p1.setLayout(null);

//设置p1的布局为空

p1.setOpaque(false);

//把p1设置透明,以显示图片

f.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));

//把图片添加到分层窗口的最底层

t1=new JTextArea(60,40);

t1.setLineWrap(true);

t2=new JTextArea(10,20);

t2.setLineWrap(true);

JScrollPane jsp1=new JScrollPane(t1);

JScrollPane jsp2=new JScrollPane(t2);

JButton send=new JButton("发 送");

JButton clear=new JButton("清 空");

t1.setOpaque(false);

t2.setOpaque(false);//设置文本域透明

jsp1.setOpaque(false);

jsp1.getViewport().setOpaque(false);

jsp2.setOpaque(false);

jsp2.getViewport().setOpaque(false);

//把滚动条设置为透明

jsp1.setBounds(0,0,453,465);

jsp2.setBounds(0,465,453,115);

send.setBounds(150,580,100,40);

clear.setBounds(250,580,100,40);

//通过绝对布局给组件布局

Font font=new Font("楷体",Font.PLAIN,16);

t1.setFont(font);

t2.setFont(font);//设置字体

send.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

try{

s=t2.getText();

t2.setText(" ");

//t1.append(in.readUTF()+"\n");

System.out.println(s);

t1.append("Client "+df.format(new Date())+"\n"+s+"\n");

out.writeUTF(df.format(new Date())+" Client:"+"\n"+s);

t1.setCaretPosition(t1.getText().length());

}catch(Exception ce){ce.printStackTrace();}

}

});

t2.addKeyListener(new KeyAdapter(){

//文本域键盘监听,当按下Enter时,触发事件

public void keyPressed(KeyEvent e){

if(e.getKeyCode()==KeyEvent.VK_ENTER){

try{

s=t2.getText();

t2.setText(" ");

t1.append("Client "+df.format(new Date())+"\n"+s+"\n");

out.writeUTF(df.format(new Date())+" Client:"+"\n"+s);

t1.setCaretPosition(t1.getText().length());

}catch(Exception ce){ce.printStackTrace();}

}

}

});

p1.add(jsp1);

p1.add(jsp2);

p1.add(send);

p1.add(clear);

f.setSize(460,656);

f.setLocation(500,400);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

A a=new A();

Thread q=new Thread(a);

q.start();

//q.sleep(2000);

}

public static void main(String[] args){

new ChatClient();

}

}

ps:加了背景图片,所以程序比较长
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: