本文共 3677 字,大约阅读时间需要 12 分钟。
1、TCP 可靠协议,假设服务器发送消息给客户端,客户端收到之后,会有一个回应给服务器端,告诉它“我已经收到了”,如果服务器在设定的时间没没有收到客户端的反馈,则认为消息发送不成功,继续发送 ,所以TCP协议是安全的,可靠协议,很少出现丢包的情况 2、UDP 不可靠协议,服务器端只管发送数据给客户端,无论你有没有收到,都不会做处理, 一般用来做直播。视频通过这些用的比较多 - public class ServerSockt {
-
- public static List<Socket> lists = Collections.synchronizedList( new ArrayList<Socket>());
- public static void main(String[] args) {
- try {
- ServerSocket ss = new ServerSocket(8285);
- while( true){
- Socket s =ss.accept();
- lists.add(s);
-
- new Thread( new ServerThread(s)).start();
- }
-
- } catch (Exception e) {
-
- }
- }
- }
-
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.PrintStream;
- import java.net.Socket;
- import java.text.SimpleDateFormat;
- import java.util.Date;
-
- public class ServerThread extends Thread {
- private Socket socket;
- private BufferedReader br;
-
- public ServerThread(Socket socket) throws Exception {
- super();
- this. socket = socket;
-
- br = new BufferedReader( new InputStreamReader(socket.getInputStream(),"UTF-8" ));
- }
- @Override
- public void run() {
- super.run();
- try {
- String msg;
- while((msg= br.readLine())!= null){
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
-
- PrintStream ps = new PrintStream(socket .getOutputStream(), true,"UTF-8" );
- ps.println( "服务器说还给你:" +msg+">>>>>" +df.format( new Date()));
- System. out.println(msg);
- ps.flush();
- }
- } catch (Exception e) {
-
- }
- }
- }
注意一个细节!就是编码问题,一定要统一流的编码格式 - public class MainActivity extends AppCompatActivity {
- private EditText text;
- private Button btnSocket;
- private ListView listView;
- private MsgAdapter adapter;
- private List<String> list = new ArrayList<>();
- private Socket socket = null;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- text = (EditText) findViewById(R.id.text);
- btnSocket = (Button) findViewById(R.id.button);
- listView = (ListView) findViewById(R.id.msgList);
- adapter = new MsgAdapter(MainActivity.this, list);
- listView.setAdapter(adapter);
-
- new Thread(new Runnable() {
- @Override
- public void run() {
- socket();
-
- }
- }).start();
-
- btnSocket.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- sendMsg();
- }
- }).start();
- }
- });
-
- }
-
-
-
-
- private void socket() {
- try {
- if (socket == null) {
- socket = new Socket("192.168.11.150", 8285);
- }
- receiveMsg();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
-
-
- public void sendMsg() {
- PrintStream writer = null;
- try {
- String msg = "客户端说:" + text.getText().toString();
-
- writer = new PrintStream(socket.getOutputStream(), true, "UTF-8");
- writer.println(msg);
- writer.flush();
- list.add(msg);
- handler.sendEmptyMessage(0);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
-
-
-
-
- public void receiveMsg() {
- BufferedReader br = null;
- try {
-
- br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
- String msg;
- while ((msg = br.readLine()) != null) {
- list.add(msg);
- handler.sendEmptyMessage(0);
- }
-
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- }
-
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- adapter.notifyDataSetChanged();
- }
- };
-
- }
转载地址:http://ybcrj.baihongyu.com/