`

android Socket实现简单聊天小程序

 
阅读更多
android Socket实现简单聊天小程序

服务器端:

package org.hwq.echo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TalkServer {
	public static void main(String[] args) throws IOException{
		ServerSocket server = null;
		Socket client = null;
		BufferedReader in = null;
		PrintWriter out = null;
		try{
			server = new ServerSocket(4700);
			client = server.accept();
			out = new PrintWriter(client.getOutputStream());
			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			String line = in.readLine();
			while(!"bye".equals(line)){
				System.out.println("client:"+line);
				out.println("echo:"+line);
				out.flush();
				line = in.readLine();
			}
		}catch (Exception e) {
			e.printStackTrace();
			if(client !=null)
				client.close();
			if(server != null)
				server.close();
		}
	}
}


手机端:
package org.hwq.cho;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class EchoActivity extends Activity implements OnClickListener {
	EditText show,msg;
	Button send;
	Handler handler;
	Socket client;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        handler = new MyHandler();
        show = (EditText) findViewById(R.id.show);
        msg = (EditText) findViewById(R.id.msg);
        send = (Button) findViewById(R.id.send);
        send.setOnClickListener(this);
    }
	@Override
	public void onClick(View arg0) {
		String message = msg.getText().toString();
//		System.out.println("msg:"+message);
		new EchoThread(EchoActivity.this,message).start();
	}
	public class MyHandler extends Handler{
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what){
			case 1:
				Toast.makeText(EchoActivity.this, "建立连接失败", 0).show();
				break;
			case 2:
				String message = (String) msg.obj;
				System.out.println("Handler:"+message);
				show.append("\n"+message);
				break;
			}
		}
	}
	private class EchoThread extends Thread{
		private Context context;
		private String msg;
		EchoThread(Context context,String msg){
			this.context = context;
			this.msg = msg;
		}
		public void run(){
			if(client == null){
				try {
					client = new Socket("192.168.1.102",4700);
				} catch (IOException e) {
					Message message = new Message();
					message.what = 1;
					handler.sendMessage(message);
				}
			}
			System.out.println("建立连接");
			try{
				BufferedReader in;
				BufferedReader input;
				PrintWriter out;
				in = new BufferedReader(new InputStreamReader(client.getInputStream()));
				out = new PrintWriter(client.getOutputStream());
				String line = msg;
				if(!"bye".equals(line)){
					System.out.println("line:"+line);
					out.println(line);
					out.flush();
					String echo = in.readLine();
					System.out.println("server:"+echo);
					Message message = new Message();
					message.obj = echo;
					message.what = 2;
					handler.sendMessage(message);
				}
			}catch (Exception e) {
				
			}
		}
	}
}


注意几点:
1、添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>

如果没添加,无法使用socket连接网络。
2、在新启线程中不要使用android系统UI界面
在EchoThrad的run()方法里面,有下面代码:
if(client == null){
				try {
					client = new Socket("192.168.1.102",4700);
				} catch (IOException e) {
					Message message = new Message();
					message.what = 1;
					handler.sendMessage(message);
				}
			}

这里的handler.sendMessage(message);是发送一个消息给handler,然后handler根据消息弹出一个Toast显示连接失败。如果这里直接使用
Toast.makeText(EchoActivity.this, "建立连接失败", 0).show();

会报如下错:
Can't create handler inside thread that has not called Looper.prepare()

分享到:
评论

相关推荐

    androidSocket实现简单聊天小程序归类.pdf

    在Android平台上实现一个简单的聊天应用程序,通常涉及到网络通信技术,特别是使用Socket编程。Socket是TCP/IP协议的一部分,它允许两台计算机(客户端和服务器)通过网络进行双向通信。在这个例子中,我们看到...

    安卓Android基于Socket简易聊天项目开发(源码+运行截图+视频).zip

    安卓Android基于Socket简易聊天项目开发(源码+运行截图+视频).zip 内容概要:安卓Android基于Socket简易聊天项目开发(源码+运行截图+视频).zip 适合人群:具备一定编程基础,准备毕业设计的同学 能学到什么:①如何...

    安卓Android基于Socket简易聊天项目开发毕业论文源码

    一个简单的聊天系统项目,客户端+服务器模式,也就是cs模式,采用java开发语言,服务器端建立Socket监听端口,客户端连接socket发送数据,服务器端将接收到的聊天信息,推送到所有的客户端界面,实现了多人聊天的...

    安卓Android基于Socket简易聊天项目开发

    一个简单的聊天系统项目,客户端+服务器模式,也就是cs模式,采用java开发语言,服务器端建立Socket监听端口,客户端连接socket发送数据,服务器端将接收到的聊天信息,推送到所有的客户端界面,实现了多人聊天的...

    小程序源码 仿微信聊天软件,Socket实现.zip

    【标题】小程序源码:仿微信聊天软件,Socket实现 在移动互联网时代,即时通讯(Instant Messaging, IM)应用已经成为日常生活中不可或缺的一部分。微信作为全球最大的社交平台之一,其聊天功能的设计与实现一直...

    android简单的聊天demo

    总之,通过Android的Service和BroadcastReceiver,我们可以实现一个简单的聊天应用,允许用户发送和接收消息。不过,这仅是一个基础的示例,实际的聊天应用通常还需要考虑更多功能,如用户认证、消息存储、群组聊天...

    Android Socket编程实践

    总之,Android Socket编程是构建网络应用程序的关键,涉及TCP和UDP协议的理解、Android平台的特殊限制以及实际应用中的优化策略。通过实践,开发者可以熟练掌握这一技术,构建高效稳定的网络通信系统。

    SocketAndroid端

    SocketAndroid端是一个基于Android平台的客户端程序,主要利用Socket编程技术实现设备间的网络通信。在Android应用开发中,Socket通信是实现数据交换的一种基础方法,它允许应用通过TCP/IP协议与远程服务器进行双向...

    android-socket-nio-master.zip

    在Android开发中,Socket通信是应用层与传输层之间的接口,用于实现设备间的网络通信。传统的Socket通信通常基于BIO(Blocking I/O)模型,但随着高性能和高并发需求的增加,开发者开始转向NIO(Non-blocking I/O)...

    安卓Android基于Socket简易聊天项目开发源码+服务端+客户端+Android端+演示视频

    一个简单的聊天系统项目,客户端+服务器模式,也就是cs模式,采用java开发语言,服务器端建立Socket监听端口,客户端连接socket发送数据,服务器端将接收到的聊天信息,推送到所有的客户端界面,实现了多人聊天的...

    网络编程课程设计报告-Android-Socket-聊天室.doc

    通过这份报告,我们可以了解到构建一个基于Android的Socket聊天室应用涉及的技术点,包括Socket编程原理、服务器和客户端的工作流程,以及如何设计和实现聊天系统的各种功能。这对于理解和实践网络编程,尤其是...

    android socket

    "socket demo"通常是指一个示例程序,用于展示如何在Android应用中实现Socket通信的基本流程和功能。下面将详细介绍Android Socket的基本概念、使用场景、工作原理以及如何创建一个简单的Socket Demo。 1. Android ...

    android聊天小项目

    Android聊天小项目的实现涉及多个关键技术和流程,让我们一步步来解析这个过程。 1. **网络通信**:在这个项目中,手机客户端与服务端之间的通信是核心部分。通常,我们使用HTTP或HTTPS协议进行网络通信,但为了...

    android socketClient

    Android Socket客户端常用于即时聊天应用、文件传输、远程控制等场景,通过与服务器端的Socket通信实现功能。 综上所述,“android socketClient”涉及到的知识点主要包括Socket的基本概念、TCP/IP协议的理解、...

    android实现局域网聊天 - UDP实现

    在Android平台上实现局域网聊天,通常涉及到网络通信技术,特别是使用UDP(User Datagram Protocol)协议。UDP是一种无连接的、不可靠的传输协议,它提供了较低的开销和较高的传输速度,非常适合实时性要求高的应用...

    Unity手机android端多人聊天室demo

    在这个"Unity手机android端多人聊天室demo"项目中,开发者利用Unity的潜力,构建了一个支持多用户同时在线聊天的系统。这个系统可以运行在Android、iOS以及PC等多个平台上,实现了真正的跨平台通信。 在实现这个...

Global site tag (gtag.js) - Google Analytics