import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Client extends JFrame 
 implements ActionListener
{
JTextArea textreceive=new JTextArea();
JTextArea textsend =new JTextArea();
JButton button =new JButton ("Send");

BufferedReader in;
PrintWriter out;
public Client() 
{
//init controls
setTitle("Client");
setBounds(50,50,500,400);
getContentPane().setLayout(null); getContentPane().add(textreceive);
getContentPane().add(textsend);
getContentPane().add(button);

button.addActionListener(this);

textreceive.setBounds(10,10,450,300);
textsend.setBounds(10,320,350,30);
button.setBounds(370,320,70,30);
}

public void startNet() throws IOException
{
Socket client=new Socket("127.0.0.1",9999);
try
{
System.out.println("Socket=" +client);

in=new BufferedReader(
  new InputStreamReader(client.getInputStream()));
out=new PrintWriter(
   new BufferedWriter(
      new OutputStreamWriter(
       client.getOutputStream())),true);
String str=null;
while ( true )
{
str = in.readLine();
System.out.println(str);
textreceive.append(str+"\n");
            }
}
finally
{
client.close();
}
}

public void actionPerformed(ActionEvent event)
{
String str=textsend.getText();
if (!str.equals(""))
{
out.println(textsend.getText());
//out.println(textsend.getText());
out.flush();
textreceive.append(textsend.getText()+"\n");
textsend.setText("");
}
}

public static void main(String args[]) throws IOException
{
Client c=new Client();
c.show();
c.startNet();
}
}import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Server extends JFrame
implements ActionListener
{
JTextArea textreceive=new JTextArea();
JTextArea textsend=new JTextArea();
JButton button=new JButton("Send");

BufferedReader in;
PrintWriter out;
public Server () 
{
//init controls
setTitle("Server");
setBounds(50,50,500,400);
getContentPane().setLayout(null); getContentPane().add(textreceive);
getContentPane().add(textsend);
getContentPane().add(button);

textreceive.setBounds(10,10,450,300);
textsend.setBounds(10,320,350,30);
button.setBounds(370,320,70,30);

button.addActionListener(this);
}


public void listenClient() throws IOException
{
ServerSocket server=new ServerSocket(9999);
System.out.println("start:"+server);
textreceive.append("start"+server+"\n");
try
{
Socket s=server.accept();
try
{
System.out.println("connecting :"+s);
textreceive.append("connecting :"+s+"\n");

in=new BufferedReader(
  new InputStreamReader(s.getInputStream()));
/*out=new PrintWriter(
  new BufferedWriter(
    new OutputStreamWriter(s.getOutputStream())));*/
out=new PrintWriter(s.getOutputStream());

String str=null;
while ( true )
{
str = in.readLine();
System.out.println(str);
textreceive.append(str+"\n");
             }
            }
finally
{
s.close();
}
}
finally
{
server.close();
}
}

public void actionPerformed(ActionEvent event)
{
String str=textsend.getText();
if (!str.equals(""))
{
out.println(textsend.getText());
//out.println(textsend.getText());
out.flush();
textreceive.append(textsend.getText()+"\n");
textsend.setText("");
}
}

public static void main(String args[]) throws IOException
{
Server s=new Server();
s.show();
s.listenClient();
}
}
不足之处请多提出来。多给建议。谢过了!

解决方案 »

  1.   

    zhi chi ni !!!!!!!!!!.......
      

  2.   

    小弟当网管几个月了,感觉很没前途!现在想学jave,大家指导一下小弟吧,我该看些什么书?怎么学jave?
      

  3.   

    不错。
    另外,class Server 类是不是最好开两个线程,一个发送,一个接收。?
      

  4.   

    谢谢各位!
    其实这个程序非常的简单,初学之人写的啦。
    第一个文件是作为客户端。Socket client=new Socket("127.0.0.1",9999);连接服务器;
    第二个文件做服务器,ServerSocket server=new ServerSocket(9999);Socket s=server.accept();等待连接,要先运行服务器程序,再运行客户端程序,建立tcp连接之后,服务器和客户端的区别就不存在了,通过流相互发送数据。构造函数是实现界面。
    这个程序只能在两个特定的机器上实现一对一的聊天,要用多线程才能使服务器连接多个客户端。
      

  5.   

    只是一个简单的CS结构,而且只是单对单,服务端只会给连接上的SOCKET发送信息,客户端也一样。
    如果一个用户连上了,服务端应该不会响应其他用户端了,始终忙于消息循环等待了。
    而且楼主的程序始终不会退出,可以在客户端发送quit后,让socket关闭。要实现聊天室得用多线程,在accept之后产生一个服务线程负责发送和接受指定socket的信息,用集合对象保存每个客户,在服务端遍历集合类实现群发,不过得注意同步。有了这个基础再慢慢改进,聊天室就慢慢成型了。呵呵
      

  6.   

    谢谢 NetSniffer(扑克) !
    有个问题想请教一下:
    如何定时的检验客户的连接已经断开,并且关闭该连接呢
      

  7.   

    挺好的呀。呵呵!~~~~~~~~~~
     大家加我的QQ:284934272
    写明CSDN
      

  8.   

    不错,不错,结构清晰!!
    对我初步了解ServerSocket和Socket有很大的帮助
      

  9.   

    我想作一个简单的人机交互界面,运行时只有一个框,user输入一行,计算机答一行,做好了以后
    大约就是下面的样子:
    U:what is your name?
    C:computer
    U:what are you doning?
    C:computing我该选用swing组件中的哪一个呢??楼主和各路高手能不能给指点一下呢??
      

  10.   

    用JTextArea 和 JTextField试试啊