服务器端代码
服务端代码很简单:
1:创建一个线程,在线程里面 创建一个ServerSocket对象和创建一个阻塞式Socket;
代码如下:
public void run() {
try {
//创建一个serverSocket对象
ServerSocket serverSocket = new ServerSocket(Main.port);
while(true){
//阻塞线程
Socket socket = serverSocket.accept();
System.out.println("连接成功");
MyThread2 thread2 = new MyThread2(socket);
thread2.start();
ChatManager.getInstance().add(thread2);
}
} catch (IOException e) {
e.printStackTrace();
}
2:再创建一个带参的线程,用于数据的读取,具体代码如下
public void out(String out) {
try {
socket.getOutputStream().write(out.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
try {
BufferedReader bf = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "UTF-8"));
String line = null;
while ((line = bf.readLine()) != null) {
System.err.println(line);
ChatManager.getInstance().push(this, line);
}
bf.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3:再创建一个单例类,用来对事件进行分发。具体代码如下
Vector<MyThread2> vector = new Vector();
public void add(MyThread2 thread2) {
vector.add(thread2);
}
public void push(MyThread2 cs,String out){
for (int i = 0; i < vector.size(); i++) {
MyThread2 tMyThread2 = vector.get(i);
if(!cs.equals(tMyThread2)){
tMyThread2.out(out+"\n");
}
}
}
}
以上是服务端代码。。。。
接下来写客户端代码:其实也很简单
1:先连接socket,进行连接操作
public void connect(View v) {
final String contents = ipconnet.getText().toString();
AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() {
@Override
protected Void doInBackground(Void... voids) {
try {
socket = new Socket(contents, 5011);
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
publishProgress("@success");
}catch (Exception e){
Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
}
String line;
try {
while ((line = reader.readLine()) != null) {
publishProgress(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
if (values[0].equals("@success")){
Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show();
}
content.append("别人说:"+values[0]+"\n");
super.onProgressUpdate(values);
}
};
read.execute();
}
2:接下来的是往服务端进行写数据,代码如下
public void send(View v) {
try {
content.append("我说:"+inputcontent.getText().toString()+"\n");
writer.write(inputcontent.getText().toString()+"\n");
writer.flush();
inputcontent.setText("");
} catch (IOException e) {
e.printStackTrace();
}
}
到这,别忘了给项目加上网络权限,所以的代码全部呈现。项目下载地址