【Android】Socket客户端

本文介绍了一个简单的Android聊天应用程序的开发过程,包括自定义按钮皮肤的方法、实现客户端与服务器通信的具体代码示例,以及如何处理多线程和网络连接等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打包好的apk:http://url.cn/UN0bvo

注:

1.这个apk的IP地址是我的主机地址...

2.要android4.x才能正常运行...

3.发现只有本校校园网的同学才能连上........


自定义按钮皮肤:

1.在res里面新建一个叫drawable的文件

2.里面放入需要的素材图片

3.新建一个xml(button_skin),类型是Drawabel的文件写入一下内容

4.在主界面的xml文件里面Button的属性加上android:background="@drawable/button_skin"

button_skin.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="false" android:drawable="@drawable/normal"></item>
    <item android:state_pressed="true" android:drawable="@drawable/pressed"></item>
</selector>


MainActivity.java(要在mainfest.xml中加上Internet权限!)

package com.example.chatclient;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	EditText editText;
	TextView text;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		editText = (EditText) findViewById(R.id.editText1);
		text = (TextView) findViewById(R.id.textView1);
		
		findViewById(R.id.connect).setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				connect();
			}
		});
		
		findViewById(R.id.send).setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				send();
			}

		});			
	}

	//定义socket,以及它的输入输出流对象
	Socket socket = null;
	BufferedWriter writer = null;
	BufferedReader reader = null;
	
	public void connect(){
			//启用异步处理多线程
		 	AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>(){

				@Override
				protected Void doInBackground(Void... arg0) {
					try {
						socket = new Socket("10.10.164.73",12345);
						//获取socket的输入输出流
						writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
						reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
						publishProgress("@Successfully!");
					}catch (UnknownHostException e1) {
						Toast.makeText(MainActivity.this, "无法建立连接!", Toast.LENGTH_SHORT).show();
						e1.printStackTrace();
					} catch (IOException e1) {
						Toast.makeText(MainActivity.this, "无法建立连接!", Toast.LENGTH_SHORT).show();
						e1.printStackTrace();
					}
					try {
						String line = null;
						while ((line = reader.readLine()) != null) {
							publishProgress(line);
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
					return null;
				}

				@Override
				protected void onProgressUpdate(String... values) {
					if(values[0].equals("@Successfully!")){
					  Toast.makeText(MainActivity.this, "连接成功!", Toast.LENGTH_SHORT).show();
					}
					text.append("别人说:"+values[0]+"\n");
					super.onProgressUpdate(values);
				}		
			};
			
			//启动线程
			read.execute();
	}
	
	public void send(){
		try {
			writer.write(editText.getText().toString()+"\n");
			writer.flush();
			text.append("我说:"+editText.getText().toString()+"\n");
			editText.setText("");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值