最近研究了一下Java中的socket通信机制,由于英语水平不好,只能习惯性的百度、谷歌上找相关类文章,总是有一些收获的,也遇到了不少小困难(其实是对这些机制不了解),现在写下来。
顺便说一下,网上的那些源代码都是复制来复制去,照样写上去总是不能正常运行,是他们的错的还是我写的是错的?
下面是一些最基本的东西,网上总结的。
端口 :端口是将应用程序与IP网络相关联,是应用进程的地址标识。分为两种公用端口(0~1023)和临时端口(1024~65535),我们用的就是临时端口。
套接字:区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
流:Java中的流分为两种,一种是字节流(8位),另一种是字符流(16),分别由四个抽象类来表示:InputStream,OutputStream,Reader,Writer。
InputStream/OutputStream:
是所有的输入和输入类的基类。
面向字节形式的I/O操作(8位字节流)。
Reader/Writer:
面向字符的I/O操作(16位的Unicode字符,在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer)
InputStreamReader:可以将InputStream转换为Reader
OutputStreamWriter:可以将OutputStream转换为Writer
关于TCP的三次握手可以看这个:http://www.cnblogs.com/rootq/articles/1377355.html
基于TCP的聊天室
下面是效果图:
客户端将消息发往服务端用的是字节流,服务器端发往客户端用的是字符流。
Client客户端代码:
开启一个ServerSocket监听一个端口
/** * 服务器端 * */ public class Server { private ServerSocket sock ; private String str ; private List<Socket> sockLi = new ArrayList<Socket>(); private String conte = null;//当前接收到的信息 public Server() { try { //* 创建ServerSocket负责接收客户连接请求 sock = new ServerSocket(5171,3); } catch (IOException e) { e.printStackTrace(); } } public void beginServer() { while(true) { try { Socket soc = sock.accept() ; sockLi.add(soc); //开启线程 new Thread(new Serv(soc)).start(); } catch (IOException e) { e.printStackTrace(); } } } private class Serv implements Runnable{ private Socket soc ; public Serv(Socket so) { this.soc = so; } @Override public void run() { try { InputStream instr = soc.getInputStream(); while(!soc.isClosed()){ //从流中读取下一个字节 int len = instr.read(); //从字节流中读取信息 byte[] bt = new byte[len]; instr.read(bt, 0, len); str = new String(bt); if(str.equals("end")) { Thread.sleep(200); soc.close(); sockLi.remove(soc); break ; } else if(str.trim().equals("")) { continue ; } else { conte = str; sendMessage(); } } } catch (IOException e) { //连接断开 sockLi.remove(soc); e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } private void sendMessage() { PrintWriter pr; for(Socket so:sockLi) { try { pr = new PrintWriter(so.getOutputStream(),true); pr.print(conte+"\n"); pr.flush(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { Server se = new Server(); se.beginServer(); } }提一下 readline和read都会阻塞进程,readline遇到\n会返回,所以在客户端发送消息后要发送一个\n表示已经发送完。
相关推荐
在Android平台上,构建一个Socket聊天室是一个典型的网络通信应用场景,主要涉及到Java的Socket编程和Android的客户端开发。本文将深入探讨如何使用Socket技术在Android上实现一个简单的聊天室功能。 首先,我们...
在实现聊天功能时,我们需要创建一个ServerSocket实例,设定监听的端口,然后在一个循环中调用其accept()方法来接受来自客户端的连接请求。每个连接请求都会创建一个新的Socket实例,代表与客户端的单个连接。客户端...
这个"Android高级应用源码-Android例子源码Socket实现粗略的聊天室功能.zip"包含了一个基本的Android项目,它展示了如何利用Java的Socket类在客户端和服务器之间进行数据通信,从而实现聊天功能。 首先,我们需要...
在这个“android实现Socket通信聊天Demo”项目中,开发者创建了一个简单的聊天室,让用户能够通过Socket进行实时交流。 首先,我们要理解TCP协议。TCP(Transmission Control Protocol)是互联网协议族中的传输层...
Android基于Socket实现的聊天室功能 注解详细 一看就懂 包含服务器和客户端 服务器是一段java代码 客户端直接运行在手机上 用DOS(MyEclipse)开启服务器 然后运行模拟器或者手机即可。 注:请将客户端代码中的ip...
本示例源码展示了如何利用Java的Socket库在Android平台上实现一个基础的聊天室功能。这个简单聊天室允许用户发送和接收消息,为理解Android网络编程提供了一个很好的实践平台。 首先,我们来看"Android例子源码...
在这个项目中,开发者使用了Socket通信协议来构建服务器和客户端之间的数据传输,实现了类似QQ和WeChat的沉浸式聊天界面。以下是关于这个项目的详细知识点: 1. **Socket编程**: Socket是网络通信的基础,它为两...
在本文中,我们将深入探讨如何构建一个简单的Android聊天室应用,以及它与PC服务器端和客户端的交互。这个"Android简易版聊天室"项目旨在提供一个基础架构,用于理解多平台间实时通信的工作原理。 首先,我们要理解...
在本项目中,“Android客户端C#服务器Socket聊天室”是一个示例应用,它演示了如何使用Socket编程在Android客户端和C#服务器之间实现一个简单的聊天功能。Socket编程是网络通信的基础,它允许两个设备(在这里是...
总之,创建一个Android socket聊天室是一个涉及网络编程和Android应用设计的综合性任务。通过使用Java的Socket API,结合Android的多线程和网络权限管理,我们可以构建一个允许用户之间实时交流的聊天平台。
在安卓开发中,实现一个基于Socket的简单聊天室功能是一个基础但重要的技能。这个例子源码展示了一种方法,让两个或多个用户通过网络进行实时通信。以下将详细讲解涉及的知识点。 1. **Android应用架构**:Android...
本项目模拟了一个简单的客户端-服务器(CS)聊天室,让我们深入了解一下Android中的Socket通信及其实现。 首先,理解Socket的基本概念至关重要。Socket是网络通信中的一个端点,它允许两个应用程序通过网络进行数据...
在Java中我们可以利用socket编程实现聊天室,在Android中也一样,因为Android完全支持JDK本身的TCP、UDP网络通信API。我们可以使用ServerSocket、Socket来建立基于TCP/IP协议的网络通信;也可以使用DatagramSocket、...
Java Socket 多人聊天室是一种基于C/S(客户端/服务器)架构的通信系统,它利用Java的Socket编程技术实现用户之间的实时交流。在本项目中,服务器端(Server)负责接收多个客户端(Client)的连接请求,管理和传递...
在Android开发中,构建基于Socket的聊天室是一个常见的练习,它可以帮助开发者理解网络通信的基本原理。Socket编程是TCP/IP协议栈的一部分,它提供了进程间通信(IPC)的能力,尤其是在网络环境中。下面我们将深入...
通过这份报告,我们可以了解到构建一个基于Android的Socket聊天室应用涉及的技术点,包括Socket编程原理、服务器和客户端的工作流程,以及如何设计和实现聊天系统的各种功能。这对于理解和实践网络编程,尤其是...
在开发一个聊天室程序时,我们可以使用Socket、Remoting、...而现在,我正要实现一个C#语言作为服务器端、Android作为客户端的聊天室。由于服务器端和客户端不是同一语言(C#和java),所有我选择了Socket作为通信协议。
基于Socket的简易多人聊天室是利用这一技术实现的一个多用户交互的平台。在这个聊天室中,用户可以通过发送消息与房间内的其他用户实时交流。 【描述】: "基于socket的简易多人聊天室基于socket的简易多人聊天室...
本示例源码是关于如何使用Socket实现一个简单的聊天室功能。Socket在计算机网络编程中扮演着核心角色,它提供了应用程序间的双向通信,使得数据能在不同设备之间交换。在安卓环境中,Socket可以用于实现客户端和...
这个项目中的代码应该包含了实现以上所有概念的示例,通过查看源代码,你可以更好地理解如何在Android上利用Socket进行C/S通信,实现基本的聊天功能。这是一个很好的起点,为进一步开发更复杂、功能丰富的聊天应用...