• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小不点儿大的由我做主!
流年似水!
博客园    首页    新随笔    联系   管理    订阅  订阅

socket自由聊天程序

       这两天一直在改进一个用socket写的自由聊天程序,也就是在本机的控制台能收发消息的一个简单程序,可是在程序最后取出的时候老是有一个错误,本人改了两天了,也试着的、换了一种方法,可是也不见成效,所在暂且把代码贴出来。过两天脑壳清醒了再改改。(放电脑里怕被我删了,哈哈)看到本文的人如果能找出错误原因并告诉我的话,本人不胜感激哦!

服务器端程序:
Code
import java.io.*;
import java.net.*;
public class TestServer
{
    
private ServerSocket s;
    
private Socket s1;
    
private DataOutputStream dos;
    
private DataInputStream dis;
    
    
public void connect(){
        
try
        {
            s
=new ServerSocket(8888);
            s1
=s.accept();
            dos
=new DataOutputStream(s1.getOutputStream());
            dis
=new DataInputStream(s1.getInputStream());
        }
        
catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    
public void close(){
        
try
        {
            dis.close();
            dos.close();
            s1.close();
            s.close();
        }
        
catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    
public void createThread(){
        
new MyServerReader(this).start();
        
new MyServerWriter(this).start();
    }

    
public DataOutputStream getDataOutputStream(){
        
return dos;
    }

    
public DataInputStream getDataInputStream(){
        
return dis;
    }

    
    
public static void main(String[] args) 
    {
            TestServer ts
=new TestServer();
            ts.connect();
            ts.createThread();
    }
}

    
class MyServerReader extends Thread
    {
        
private TestServer server;
        
public MyServerReader(TestServer server){
            
this.server=server;
        }
        
public void run(){
            DataInputStream dis
=server.getDataInputStream();
            
            String info;
            
try
            {
                
while (true)
                {
                    info
=dis.readUTF();
                    
                    System.out.println(
"对方说:"+info);
                    
if (info.equals("bye"))
                    {
                        System.out.println(
"对方下线,程序退出");
                        server.close();
                        System.exit(
0);
                    }
                }
            }
            
catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    };

    
class MyServerWriter extends Thread
    {
        
private TestServer server;
        
public MyServerWriter(TestServer server){
            
this.server=server;
        }
        
public void run(){
            DataOutputStream dos
=server.getDataOutputStream();
            
            InputStreamReader isr
=new InputStreamReader(System.in);
            BufferedReader br
=new BufferedReader(isr);
            String info;
            
try
            {
                
while(true){
                    info
=br.readLine();
                    dos.writeUTF(info);
                    
if(info.equals("bye")){
                        System.out.println(
"自己下线,程序退出!");
                        server.close();
                        System.exit(
0);
                    }
                }
            }
            
catch (IOException e)
            {
                e.printStackTrace();
            }
            
        }

客户端程序:
Code
import java.io.*;
import java.net.*;
public class TestClient 
{
    
private Socket s;
    
private DataOutputStream dos;
    
private DataInputStream dis;
    
    
public void connect(){
        
try
        {
            s
=new Socket("127.0.0.1",8888);
            dos
=new DataOutputStream(s.getOutputStream());
            dis
=new DataInputStream(s.getInputStream());
        }
        
catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    
public void close(){
        
try
        {
            dis.close();
            dos.close();
            s.close();
        }
        
catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    
public void createThread(){
        
new MyClientReader(this).start();
        
new MyClientWriter(this).start();
    }

    
public DataInputStream getDataInputStream(){
        
return dis;
    }

    
public DataOutputStream getDataOutputStream(){
        
return dos;
    }

    
public static void main(String[] args) 
    {
        TestClient tc
=new TestClient();
        tc.connect();
        tc.createThread();
    }
}

    
class MyClientReader extends Thread
    {
        
private TestClient client;
        
public MyClientReader(TestClient client){
            
this.client=client;
        }
        
public void run(){
            DataInputStream dis
=client.getDataInputStream();
            
            String info;
            
try
            {
                
while(true){
                    info
=dis.readUTF();
                    System.out.println(
"对方说:"+info);
                    
if (info.equals("bye"))
                    {
                        System.out.println(
"对方下线,程序退出!");
                        client.close();
                        System.exit(
0);
                    }
                }
            }
            
catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    };

    
class MyClientWriter extends Thread
    {
        
private TestClient client;
        
public MyClientWriter(TestClient client){
            
this.client=client;
        }
        
public void run(){
            DataOutputStream dos
=client.getDataOutputStream();
            
            InputStreamReader isr
=new InputStreamReader(System.in);
            BufferedReader br
=new BufferedReader(isr);
            String info;
            
try
            {
                
while (true)
                {
                    info
=br.readLine();
                    dos.writeUTF(info);
                    
if(info.equals("bye")){
                        System.out.println(
"自己下线,程序退出!");
                        client.close();
                        System.exit(
0);
                    }
                }
            }
            
catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    };

posted @ 2009-03-06 17:06  小不点儿大的由我做主!  阅读(324)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3