- 浏览: 483667 次
- 性别:
- 来自: 武汉
最新评论
-
zyzyzy123:
请问有工程吗,我现在正在实现打电话的功能,但是一直不通,怀疑是 ...
实用的java 串口通信程序 -
wuhaitong:
引用[img][/img][*][url][/url] ...
jbpm -
迷糊_le:
maven命令, 蛮好的,谢谢
maven eclipse -
Wuaner:
不错的文章 , 谢谢分享!
Hadoop -
yuqihengsheng:
strong 很细
HighLighter
简单的Java Socket通话程序
Java中的网络编程是一个很重要的部分,也是其编程优越性的地方之一。在Java中有一个专门的Java.net类库来管理网络编程的有关方法。
下面先介绍在Java中怎样用socket进行客户与服务器通信。最后再介绍一个一个最简单的通话程序。
1.怎样用socket进行客户与服务器通信
在Java中用socket进行客户/服务器之间的通信编程。Socket是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。
要想与服务器通信必须具备三个条件:服务器程序、客户程序和连接它们的socket程序。这三个部分缺一不可。但是,客户与服务器之间的通信有很多的方式,其中另一个方法是把客户作为索取者,把服务器作为给予者。下面我们看一看Java的服务器编程。
在Java中,服务器有3个主要的功能:
1.在Java.net类库中通过构造一个ServerSocket类的实例使服务器能够检测到指定端口的信息。用ServerSocke中的accept()方法可以使服务器检测到指定端口的活动。另外,服务器还负责检测要求与它连接的客户。
·Socket类的实例代表客户与服务器连接成功。通过编程可以使多个用户通过同一个端口与服务器相连,其中都是Socket 类的实例。
2.可以分别用Socket类的getInputStream()和getOutStream()方法来发送和捕捉数据。其使用方法如下:
try{
ServerSocket myServerSocket=new ServerSocket(100);
Socket my100Socket=myServerSocket.accept();
}
catch(Exception e){
}
在上面的代码中,首先构造一个ServerSocket类的实例,并传递给它一个整数作为服务器指定可以使用的给定端口,如下:
ServerSocket myServerSocket=new ServerSocket(100);
在Java程序中如果每次构造ServerSocket时都能保持捕捉异常事件,则就随时指定了准备使用的端口。下面的代码使用accept()方法来检测端口的活动。
Socket my100Socket=myServerSocket.accept();
Accept()方法直到接收到用户的连接请求,才继续执行中断的执行程序。一旦客户的连接成功,my100Socket就代表该连接,并且可以发送和接收数据。最后,我们看一看客户是怎样请求连接的。其连接方法如下:
try{
Socket mySocket=new Socket("www.cpcw.com",100);
}
catch(Exception e ){
}
通过上面的代码可能看出,也是通过Socket类来实现的。下面我们通过一个网络编程的实例来说明如何进行网络通信。
2.一个最简单的通话程序
2.1通话器服务器:
import java.net.*;
import java.io.*;
import java.lang.*;
public class myserver{
public static void main(String args[]){
ServerSocket server;
Socket socket;
String s;
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try{
//在端口4321注册服务
server=new ServerSocket(4321);
socket=server.accept(); //监听窗口,等待连接
System.out.println("server ok");
System.out.println("**********************************************");
System.out.println("");
//获得对应Socket的输入/输出流
Is=socket.getInputStream();
Os=socket.getOutputStream();
//建立数据流
DIS=new DataInputStream(Is);
PS=new PrintStream(Os);
DataInputStream in=new DataInputStream(System.in);
while(true){
System.out.println("");
System.out.println("please wait client's message...");
System.out.println("");
s=DIS.readLine(); //读入从client传来的字符串
System.out.println("client said:"+s); //打印字符串
if(s.trim().equals("BYE"))break; //如果是"BYE",就退出
System.out.print("you say:");
s=in.readLine(); //读取用户输入的字符串
PS.println(s); //将读取得字符串传给client
if(s.trim().equals("BYE"))break; //如果是"BYE",就退出
}
//关闭连接
DIS.close(); //关闭数据输入流
PS.close(); //关闭数据输出流
Is.close(); //关闭输入流
Os.close(); //关闭输出流
socket.close(); //关闭sockey
}
catch(Exception e){
System.out.println("Error:"+e);
}
}
}
2.2通话器客户端
import java.net.*;
import java.io.*;
import java.lang.*;
public class myclient{
public static void main(String args[]){
if (args.length<1){ //判断命令加参数没有
System.out.println("you forget the name of the server!");
System.out.println("see also: myclient yxf");
System.exit(1); //如果没加参数就退出
}
Socket socket;
String s="yxfsoft@263.net";
String len;
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try{
//向主机名为args[0]的服务器申请连接
//注意端口号要与服务器保持一致:4321
socket=new Socket(args[0],4321);
System.out.println("client ok");
System.out.println("************************************************");
System.out.println("");
//获得对应socket的输入/输出流
Is=socket.getInputStream();
Os=socket.getOutputStream();
//建立数据流
DIS=new DataInputStream(Is);
PS=new PrintStream(Os);
DataInputStream in=new DataInputStream(System.in);
while(true){
System.out.print("you say:");
s=in.readLine(); //读取用户输入的字符串
PS.println(s); //将读取得字符串传给server
if(s.trim().equals("BYE"))
break; //如果是"BYE",就退出
else{
System.out.println("");
System.out.println("please wait server's message...");
System.out.println("");
}
s=DIS.readLine(); //从服务器获得字符串
System.out.println("server said:"+s); //打印字符串
if(s.trim().equals("BYE"))
break; //如果是"BYE",就退出
}
//关闭连接
DIS.close(); //关闭数据输入流
PS.close(); //关闭数据输出流
Is.close(); //关闭输入流
Os.close(); //关闭输出流
socket.close(); //关闭socket
}
catch(Exception e){
System.out.println("Error:"+e);
}
}
}
Java中的网络编程是一个很重要的部分,也是其编程优越性的地方之一。在Java中有一个专门的Java.net类库来管理网络编程的有关方法。
下面先介绍在Java中怎样用socket进行客户与服务器通信。最后再介绍一个一个最简单的通话程序。
1.怎样用socket进行客户与服务器通信
在Java中用socket进行客户/服务器之间的通信编程。Socket是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。
要想与服务器通信必须具备三个条件:服务器程序、客户程序和连接它们的socket程序。这三个部分缺一不可。但是,客户与服务器之间的通信有很多的方式,其中另一个方法是把客户作为索取者,把服务器作为给予者。下面我们看一看Java的服务器编程。
在Java中,服务器有3个主要的功能:
1.在Java.net类库中通过构造一个ServerSocket类的实例使服务器能够检测到指定端口的信息。用ServerSocke中的accept()方法可以使服务器检测到指定端口的活动。另外,服务器还负责检测要求与它连接的客户。
·Socket类的实例代表客户与服务器连接成功。通过编程可以使多个用户通过同一个端口与服务器相连,其中都是Socket 类的实例。
2.可以分别用Socket类的getInputStream()和getOutStream()方法来发送和捕捉数据。其使用方法如下:
try{
ServerSocket myServerSocket=new ServerSocket(100);
Socket my100Socket=myServerSocket.accept();
}
catch(Exception e){
}
在上面的代码中,首先构造一个ServerSocket类的实例,并传递给它一个整数作为服务器指定可以使用的给定端口,如下:
ServerSocket myServerSocket=new ServerSocket(100);
在Java程序中如果每次构造ServerSocket时都能保持捕捉异常事件,则就随时指定了准备使用的端口。下面的代码使用accept()方法来检测端口的活动。
Socket my100Socket=myServerSocket.accept();
Accept()方法直到接收到用户的连接请求,才继续执行中断的执行程序。一旦客户的连接成功,my100Socket就代表该连接,并且可以发送和接收数据。最后,我们看一看客户是怎样请求连接的。其连接方法如下:
try{
Socket mySocket=new Socket("www.cpcw.com",100);
}
catch(Exception e ){
}
通过上面的代码可能看出,也是通过Socket类来实现的。下面我们通过一个网络编程的实例来说明如何进行网络通信。
2.一个最简单的通话程序
2.1通话器服务器:
import java.net.*;
import java.io.*;
import java.lang.*;
public class myserver{
public static void main(String args[]){
ServerSocket server;
Socket socket;
String s;
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try{
//在端口4321注册服务
server=new ServerSocket(4321);
socket=server.accept(); //监听窗口,等待连接
System.out.println("server ok");
System.out.println("**********************************************");
System.out.println("");
//获得对应Socket的输入/输出流
Is=socket.getInputStream();
Os=socket.getOutputStream();
//建立数据流
DIS=new DataInputStream(Is);
PS=new PrintStream(Os);
DataInputStream in=new DataInputStream(System.in);
while(true){
System.out.println("");
System.out.println("please wait client's message...");
System.out.println("");
s=DIS.readLine(); //读入从client传来的字符串
System.out.println("client said:"+s); //打印字符串
if(s.trim().equals("BYE"))break; //如果是"BYE",就退出
System.out.print("you say:");
s=in.readLine(); //读取用户输入的字符串
PS.println(s); //将读取得字符串传给client
if(s.trim().equals("BYE"))break; //如果是"BYE",就退出
}
//关闭连接
DIS.close(); //关闭数据输入流
PS.close(); //关闭数据输出流
Is.close(); //关闭输入流
Os.close(); //关闭输出流
socket.close(); //关闭sockey
}
catch(Exception e){
System.out.println("Error:"+e);
}
}
}
2.2通话器客户端
import java.net.*;
import java.io.*;
import java.lang.*;
public class myclient{
public static void main(String args[]){
if (args.length<1){ //判断命令加参数没有
System.out.println("you forget the name of the server!");
System.out.println("see also: myclient yxf");
System.exit(1); //如果没加参数就退出
}
Socket socket;
String s="yxfsoft@263.net";
String len;
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try{
//向主机名为args[0]的服务器申请连接
//注意端口号要与服务器保持一致:4321
socket=new Socket(args[0],4321);
System.out.println("client ok");
System.out.println("************************************************");
System.out.println("");
//获得对应socket的输入/输出流
Is=socket.getInputStream();
Os=socket.getOutputStream();
//建立数据流
DIS=new DataInputStream(Is);
PS=new PrintStream(Os);
DataInputStream in=new DataInputStream(System.in);
while(true){
System.out.print("you say:");
s=in.readLine(); //读取用户输入的字符串
PS.println(s); //将读取得字符串传给server
if(s.trim().equals("BYE"))
break; //如果是"BYE",就退出
else{
System.out.println("");
System.out.println("please wait server's message...");
System.out.println("");
}
s=DIS.readLine(); //从服务器获得字符串
System.out.println("server said:"+s); //打印字符串
if(s.trim().equals("BYE"))
break; //如果是"BYE",就退出
}
//关闭连接
DIS.close(); //关闭数据输入流
PS.close(); //关闭数据输出流
Is.close(); //关闭输入流
Os.close(); //关闭输出流
socket.close(); //关闭socket
}
catch(Exception e){
System.out.println("Error:"+e);
}
}
}
发表评论
-
Apache + Tomcat集群配置详解
2013-10-15 19:57 739Apache + Tomcat集群配置详解 ... -
maven eclipse
2013-06-05 08:41 10951. 安装m2eclipse插件 要用Eclipse构 ... -
ZooKeeper API
2013-05-16 17:27 9131)ZooKeeper API 简介 ZooKeeper ... -
给DIV添加滚动条
2012-08-02 10:51 1138直接为div指定overflow ... -
jboss数据源
2012-03-21 15:19 914jboss.xml in ejb/META-INF ... -
Apache+Jobss cluster安装配置
2012-03-21 11:21 1140系统环境:OS:linux AS4 2.6.9-78.EL A ... -
Spring 事务
2012-02-14 12:26 1029Spring 事务不回滚的问题关键是:不能对该异常用 ... -
Apache 负载均衡+Tomcat集群
2012-01-17 08:45 1129一、本机环境 1.Windows 7 64位操作系统 2. ... -
ESB企业服务总线
2011-12-20 15:37 1326ESB是企业服务总线(Ente ... -
定庄记忆法
2011-08-13 10:53 1056桩可以分为大中小三类 ... -
Android开发环境搭建全程演示(jdk+eclip+android sdk)
2011-07-12 13:44 937Android开发环境搭建全程演示(jdk+eclip+a ... -
jbpm
2011-05-17 14:44 2049JBPM_ACTION action记录表 JBPM_DECI ... -
企业信息化十年
2010-12-02 22:06 9562000年之前:宇宙大爆炸 ... -
首先,遍历map有以下方法:
2010-10-22 13:00 1503首先,遍历map有以下方 ... -
职场能力
2010-10-02 17:49 1095如今职场竞争越发激烈,一大群求职者竞聘同一个(或少数几个)岗位 ... -
tomcat 配置
2010-09-24 10:39 10121、 PermGen space的全称是Permanent ... -
YUI:带checkbox的TreeView的赋值与读值
2010-09-18 21:26 2146日前做一个用户权限管理的页面,权限是一个树形结构,每个节点前是 ... -
Spring中的Assert工具类
2010-09-05 21:02 915方法入参检测工具 ... -
comments
2010-09-02 21:25 1141Item Description Comments ... -
tomcat 配置
2010-09-02 06:43 1462Tomcat内存溢出的原因 在生产环境中tomcat内存设置 ...
相关推荐
Java Socket 是一种基于TCP/IP协议族的通信方式,它允许两台计算机通过互联网进行双向通信。...提供的"Java Socket实现网络通话源码程序"可以作为实际操作的起点,通过阅读和运行代码,加深对Socket通信的理解。
Socket在计算机网络中扮演着数据传输的桥梁角色,它允许两个网络上的程序通过网络进行数据交换。在这个基础学习代码中,我们将深入理解Socket的基本概念,涵盖TCP和UDP两种主要的传输协议。 TCP(Transmission ...
接下来,我们通过一个简单的Java Socket编程示例来深入了解如何在Java中实现Socket编程。该示例展示了一个简单的Web客户端程序,用于获取一个HTML页面的内容。 ```java import java.io.*; import java.net.*; ...
在Java中,Socket类代表了客户端到服务器的连接,并通过输入/输出流进行数据交换。 2. **Android Socket编程**: - 在Android上实现Socket通信需要处理权限问题,通常需要在AndroidManifest.xml中添加`INTERNET`...
在Java中,Socket提供了一种标准的方式来实现基于TCP(传输控制协议)和UDP(用户数据报协议)的网络通信。这两种协议在互联网通信中扮演着核心角色。 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。...
Java Socket编程是Java网络编程的重要组成部分,它提供了进程间通信(IPC)的能力,尤其是在网络环境下的客户端和服务器之间的通信。本篇文章将深入讲解Java Socket编程的基础概念、原理以及实际应用,帮助你快速...
首先,我们要理解Socket是网络编程中的基本概念,它允许两个网络应用程序通过TCP/IP协议进行通信。在这个项目中,C#被用于构建服务器端,利用.NET Framework提供的System.Net.Sockets命名空间,创建并管理Socket对象...
在Android中,我们可以使用Java的Socket类来实现网络通信。 3. **语音通话**: 语音通话是指通过网络传输音频数据,模拟传统电话的效果。在Android上,这通常需要处理音频的录制、编码、解码以及实时传输。 4. **...
本项目“通过Socket与线程实现网络语音通话”是基于Java平台,利用Socket进行数据传输,通过多线程来处理并发任务,实现了实时的语音聊天功能。 首先,我们要理解Socket编程。Socket是网络通信的基础,它提供了应用...
- 聊天程序可以进一步扩展,比如支持语音、视频通话,表情和文件传输等。 - 可以添加权限控制,实现群组聊天,管理员管理等功能。 - 使用数据库存储用户信息,以便于数据持久化和跨设备登录。 通过以上描述,...
java版QQ,java编写的聊天软件,完全模仿QQ,具有强大的聊天界面,可以手动添加好友,删除好友,设置个人信息,搜索好友,基于UDP数据报方式实现两天主机之间的通话。视频,音频,短信功能没有实现,但已经做好接口...
2. 网络通信模块:使用Java的Socket或DatagramPacket类处理UDP/TCP通信。 3. 数据编码/解码:将声音数据转换为适合网络传输的格式,如PCM(脉冲编码调制)或AAC(高级音频编码)。 4. 多播处理:如果采用多播,可能...
2. **Socket对象**:在Java等语言中,Socket类代表一个网络连接,ServerSocket类用于监听客户端连接请求。 3. **心跳机制**:心跳包的设计和实现,包括心跳间隔时间、心跳包内容、超时策略、重试机制等。心跳包可以...
### 三步学会Java Socket编程 #### 一、理解TCP/IP与UDP协议 - **TCP/IP**:传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议...
因此,UDP更适合于对实时性要求高的应用,如在线视频、语音通话或简单的聊天应用。 在Java环境中开发基于UDP的聊天程序,主要涉及以下核心知识点: 1. **Java Socket编程**:Java提供了`java.net.DatagramSocket`...
Java打电话程序,是一种基于Java语言实现的通讯应用,它允许用户通过计算机或其他支持Java的设备进行语音通话。在Java平台上开发此类程序,开发者通常会利用Java的Socket编程、多线程以及音频处理技术来实现这一功能...
Java UDP聊天程序是一种基于用户数据报协议(User Datagram Protocol,UDP)实现的简单通信应用。UDP是TCP/IP协议族中的一个无连接、不可靠的传输协议,它在发送数据时不需要建立连接,也不保证数据包的顺序到达和...
在IT领域,C/S(Client/Server)架构是一种常见的分布式应用结构,主要用于构建网络应用程序,如我们这里的"基于C/S架构的JAVA聊天程序"。在这个系统中,客户端(Client)负责用户交互,而服务器端(Server)处理...
Java聊天系统程序是一种基于Java编程语言开发的交互式通信应用,它由两个主要部分组成:服务器端和客户端。这样的系统通常用于实现用户之间的实时信息交换,例如文本、语音或者文件传输。下面将详细阐述该系统的关键...