原文地址:http://blog.csdn.net/xiaoxujie2007_/article/details/7720265
服务器端 ChatServer.java
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.HashSet; import java.util.Iterator; public class ChatServer { private HashSet<Socket>clients=new HashSet<Socket>();//用于存储客户端用户列表 public ChatServer() { try { ServerSocket ss=new ServerSocket(6666); while(true) { Socket socket=ss.accept(); clients.add(socket); System.out.println("有一个用户进入聊天室..."); new ServerThread(socket,clients).start(); } }catch(Exception ex) { ex.printStackTrace(); } } public static void main(String[]args) { new ChatServer(); System.out.println("服务器已启动..."); } class ServerThread extends Thread { private Socket s; private HashSet clients; public ServerThread(Socket s,HashSet clients) { this.s=s; this.clients=clients; } public void run() { try { BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); while(true) { Iterator iter=clients.iterator(); while(iter.hasNext()) { String temp=br.readLine(); Socket tempSocket=(Socket)iter.next(); PrintWriter pt=new PrintWriter(tempSocket.getOutputStream()); pt.println(new String(("from server:"+temp).getBytes(),"utf-8")); pt.flush(); // 尝试使用以下几种写法 // OutputStreamWriter osw=new OutputStreamWriter(s.getOutputStream()); // osw.write(br.readLine()); // osw.flush(); // OutputStream os=s.getOutputStream(); // os.write(br.readLine().getBytes()); // os.flush(); // BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); // bw.write(br.readLine()); // bw.flush(); // BufferedOutputStream bos=new BufferedOutputStream(s.getOutputStream()); // bos.write(br.readLine().getBytes()); // bos.flush(); // DataOutputStream dos=new DataOutputStream(s.getOutputStream()); // dos.write(br.readLine().getBytes()); // dos.flush(); } } }catch(Exception ex) { ex.printStackTrace(); } } } }
客户端程序是一个简单到不能再简单的安卓应用
贴上main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" > <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
ChatClientActivity.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class ChatClientActivity extends Activity { /** Called when the activity is first created. */ private TextView tv_content; private Button btn_send; private EditText et_content; Socket s ; String strContent=""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv_content = (TextView) findViewById(R.id.tv_content); btn_send = (Button) findViewById(R.id.button1); et_content = (EditText) findViewById(R.id.editText1); try { s= new Socket("192.168.1.101", 6666); }catch(Exception ex) { ex.printStackTrace(); } btn_send.setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { try { String content = et_content.getText().toString(); PrintWriter pw=new PrintWriter(s.getOutputStream()); pw.println(content); pw.flush(); } catch (Exception ex) { ex.printStackTrace(); } } } ); new Thread() { public void run() { while(true) { try { InputStreamReader isr=new InputStreamReader(s.getInputStream()); BufferedReader br=new BufferedReader(isr); strContent+=br.readLine()+"\n"; sendMsg(1,getContentHandler); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }.start(); } public void sendMsg(int flag,Handler handler) { Message msg=new Message(); msg.what=flag; handler.sendMessage(msg); } private final Handler getContentHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: tv_content.setText(strContent); break; } super.handleMessage(msg); } }; }
最后,不要忘记在AndroidManifest.xml中加入 :
<uses-permission android:name="android.permission.INTERNET" />
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" > <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
相关推荐
基于socket通信的python聊天室,有课程论文!!!亲测好使!!!在强调一下不要在idle下运行!!!
《Visual C++网络通信开发入门与编程实践》 中一个基于CSocket的网络聊天室MFC程序实例。
C语言基于socket多人聊天(包含注册登录),有注册和登录模块,验证通过才可以发信息。可实现多人同时在线发信息,或者一对一发信息
Socket通信是网络通信中最常用的技术之一,通过Socket建立的可靠连接,可以让多个终端与服务器保持通信,最典型的应用是建立一个多人聊天程序。本实例使用ServerSocket建立聊天服务器。将服务器端所有的通讯线程保存...
基于Socket的网络聊天软件设计与实现基于Socket的网络聊天软件设计与实现基于Socket的网络聊天软件设计与实现基于Socket的网络聊天软件设计与实现基于Socket的网络聊天软件设计与实现
基于Socket通信写的unity简单聊天室,开发语言c#利用了tcp连接,udp广播技术,开发工具:unity2020.1。但是没有解决tcp的粘包/拆包问题,需要的话可以下载另一个资源:...
通信软件的具体实例──基于Socket的局域网聊天室
__介绍__:利用socket通信机制实现简单的聊天室功能 __开发工具__:visual studio 2012 __开发平台__:windows8 , MFC工程 , socket通信 实现的__功能__有: * 账号登录和注册 * 用户之间互相发送在线消息 * ...
首先聊天室分为服务端和客户端,通过TCP连接通信。运行顺序为: 1.首先打开服务服; 2.打开客户端,用户输入名字,连接到服务端后得到一个ID; 3.用户可以看到所有在线用户和所有频道,用户间可以单独聊天,也...
基于socket编写的聊天室程序,有私聊和群聊功能,限制同名用户登陆
C#实现的简单多人界面聊天室,原理是服务端通过TCP连接转发该客户端的信息给其他客户端
包含基于c#的socket聊天室建设,包含详细的搭建原理,分析网络通信的基本原理及相关协议,源代码经测试,功能完善,含有说明文档,步骤详细,分析透彻!
Python实现的多人聊天室源码,基于socket tcp通信,使用tkinter做客户端界面;一个多人同时在线的聊天系统;
运行环境windows,软件eclipse或者myeclipse,先运行服务器,再运行客户端,客户端可以多次运行即运行多个用户。
本项目实现了在Linux下简单的socket网络聊天室。在linux下编写并调试服务器端程序和客户端程序,实现了服务器、客户端之间的连接和通信。可以在单机上开辟两个终端窗口分别运行客户、服务器端的程序,或者将两台主机...
基于TCP协议,实现Socket通信聊天,是一个简单的Socket通信聊天室
可进行广播,和对点聊天(包含服务器和客户端)
基于socket的网络通信,带源码,可直接编译。可以更改端口号和实现文件传输功能。
基于linux的socket多人聊天室程序,采用posix多线程控制技术。客户端和服务器采用协议机制通信,服务器端在用户上线和下线时及时更新在线人数,并打印上下线信息(用户名)。客户端登陆需要输入用户名,若用户名已...
Python语言与系统设计大作业基于socket通信的多人聊天室系统源码+程序设计报告 内含大作业:socket通信的多人聊天室系统源码+程序设计报告,考试题一套、课程实验报告及源码三个