最近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