您的位置:首页 > 其它

Socket实现刷新好友

2016-03-28 01:00 218 查看
//这个是服务端的代码,一定要注意这个协议发送协议。
package com.ryan.main;import java.io.IOException;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;import com.ryan.client.ClientThread;public class MyMain {ServerSocket serverSocket;List<ClientThread> list = new ArrayList<ClientThread>();public void startServer(){try {//创建服务器套接字serverSocket = new ServerSocket(9001);System.out.println("服务器已创建...");//通过线程不断获取连接Thread thread = new Thread(){public void run() {while(true){try {System.out.println("准备接收客户端的连接信号..");//该方法为阻塞方法  A链接成功Socket clientSocket = serverSocket.accept();//等待客户端的连接System.out.println(clientSocket.getInetAddress().getHostAddress()+"已连接...");//将数据写出去PrintWriter pw = new PrintWriter(clientSocket.getOutputStream());for(int i=0;i<list.size();i++){//将别人的上线信息告诉给自己pw.write("refresh@"+list.get(i).ip_address+"@"+list.get(i).post);pw.flush();//通知别人,我已经上线list.get(i).pw.write("refresh@"+clientSocket.getInetAddress().getHostAddress()+"@"+clientSocket.getPort());list.get(i).pw.flush();}//通过List把客户端的连接全部包装list.add(new ClientThread(clientSocket));} catch (IOException e) {e.printStackTrace();}}};};thread.start();} catch (IOException e) {e.printStackTrace();}}public static void main(String []args){MyMain main = new MyMain();main.startServer();}}
---------------------------------------我是华丽的分割线--------------------------------------
package com.ryan.client;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;public class ClientThread extends Thread {InputStream is;OutputStream os;public BufferedReader br;public PrintWriter pw;public String ip_address;public int post;//通过构造方法,获取客服端连接,并进行操作public ClientThread(Socket socket){try {//获得主机名ip_address = socket.getInetAddress().getHostAddress();post = socket.getPort();is = socket.getInputStream();os = socket.getOutputStream();//获得输入流br = new BufferedReader(new InputStreamReader(is));//获得输出流pw = new PrintWriter(os);} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {super.run();}}
---------------------------------------我是华丽的分割线--------------------------------------
//下面是客服端代码。
package com.ryan.client;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class ClientThread extends Thread {//服务端IP地址private static String IP_ADDRESS = "192.168.253.28";//端口号private static int POST = 9001;//将这个类写成单列模式。static ClientThread clientThread;static Socket clientSocket;PrintWriter pw;BufferedReader br;public ClientThread(){}//单列模式写法的一种public static ClientThread getInstance(){if(clientThread==null){clientThread = new ClientThread();clientThread.start();}return clientThread;}//在RUN方法下进行初始化操作public void init(){try {//通过IP与端口通过Socket建立连接clientSocket = new Socket(IP_ADDRESS, POST);//获取输出流与输入流。记住,写出去可以一次写写出去。读进来必须是通过字符流或者字节流 缓冲流。pw = new PrintWriter(clientSocket.getOutputStream());br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {//在RUN方法下进行初始化操作init();try {while(true){//获取服务端的数据String msg = br.readLine();//将服务端是数据分割。分别获得如下数据String [] msgs = msg.split("@");String protocol = msgs[0];String ip = msgs[1];String post = msgs[2];//进行必要的判断if(protocol.equals("refresh")){System.out.println("您有好友上线,ip为"+ip+":"+post);}}} catch (IOException e) {e.printStackTrace();}super.run();}}
package com.ryan.lsn4_24_client;import com.ryan.client.ClientThread;import android.os.Bundle;import android.app.Activity;public class MainActivity extends Activity {ClientThread clientThread;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}public void init(){clientThread = ClientThread.getInstance();}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: