最近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()+"\r\n").getBytes("utf-8"));
}catch (Exception e)
{
e.printStackTrace();
}
}
}
};
Looper.loop();
}catch(SocketTimeoutException el)
{
System.out.println("网络连接超时!!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
注意上面有ip地址栏,在那里需要修改为你服务器的ip地址,就可以使用了,由于是课程大作业,所以也只是按照老师的需求写的,可能实际使用上并不是很贴合实际,见谅
下面放上下载地址