«

TCP/IP协议+SOCKET实现的群聊android应用

时间:2024-3-2 17:36     作者:韩俊     分类: Android


最近TCP/IP课的老师要求做一个大作业,使用TCP/IP协议实现一个命令行的群聊私聊应用,当时问过,说是可以使用mfc写个界面也能交的,于是我天真的以为只要协议是TCP/IP就行,UI的话所以,可写可不写,于是我就作死的写了个android的,尴尬的是他不收,说还是写windows上的吧,交上来方便审查,于是我就又要砍掉重练了。但是花了8个小时写的东西也不能说不要就不要吧,于是就写上来分享给大家。

废话不多说
直接上代码

服务器端有2个主要的文件
1.

package my;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class server {
    public static ArrayList<Socket> socketList=new ArrayList<Socket>();
    public static ArrayList<tcp_ip> tcpList=new ArrayList<tcp_ip>();
    public static ArrayList<yonghu> yonghuList=new ArrayList<yonghu>();

    public static void main(String[] args)throws IOException
    {
        ServerSocket ss=new ServerSocket(30000);
        while(true)
        {
            Socket s=ss.accept();

            socketList.add(s);
            new Thread(new ServerThread(s)).start();
        }
    }
}

2.由于太长,所以在这里就不放出来了,就放一个简单的示例吧

package my;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class ServerThread implements Runnable{

    Socket s=null;
    BufferedReader br=null;
    public ServerThread(Socket s) throws IOException
    {
        this.s=s;
        br=new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try
        {
            String content=null;
            while((content=readFromClient())!=null)
            {
                /*
//              for(Socket s:server.socketList)
//              {
//                  OutputStream os=s.getOutputStream();
//                  os.write((content + "n").getBytes("utf-8"));
//              }

            }
        }catch(IOException e)
        {
            e.printStackTrace();
        }
    }
    private String readFromClient()
    {
        try
        {
            return br.readLine();
        }catch(IOException e)
        {
            server.socketList.remove(s);
        }
        return null;
    }

}

还有2个文件是类定义文件,用来定义存放用户ID,密码,和ip地址的类

下面是客户端,由于内容较多所以就放出客户端的socket线程文件吧

package com.example.tcp_client3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketTimeoutException;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;

public class ClientThread implements Runnable{

    private Socket s;
    private Handler handler;
    public Handler revHandler;
    BufferedReader br=null;
    OutputStream os=null;
    public ClientThread(Handler handler)
    {
        this.handler=handler;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try
        {
            s=new Socket("172.21.191.174",30000);
            br=new BufferedReader(new InputStreamReader(s.getInputStream()));
            os=s.getOutputStream();
            new Thread()
            {
                public void run()
                {
                    String content=null;
                    try
                    {
                        while((content=br.readLine())!=null)
                        {
                            Message msg=new Message();
                            msg.what=0x123;
                            msg.obj=content;
                            handler.sendMessage(msg);
                        }
                    }catch(IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }.start();
            Looper.prepare();
            revHandler=new Handler()
            {
                public void handleMessage(Message msg)
                {
                    if(msg.what==0x345)
                    {
                        try
                        {
                            os.write((msg.obj.toString()+"rn").getBytes("utf-8"));
                        }catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                    }
                }
            };
            Looper.loop();
        }catch(SocketTimeoutException el)
        {
            System.out.println("网络连接超时!!");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}

注意上面有ip地址栏,在那里需要修改为你服务器的ip地址,就可以使用了,由于是课程大作业,所以也只是按照老师的需求写的,可能实际使用上并不是很贴合实际,见谅

下面放上下载地址

http://download.csdn.net/detail/yeyinglingfeng/8684159

标签: android

热门推荐