- 浏览: 97081 次
- 性别:
- 来自: 宁德
最新评论
-
oudoud:
非常不错,没见收藏按钮
240多个jQuery插件 -
idning:
ding
生日悖论 -
java之渴望:
<%@ page contentType="& ...
将网页数据导出到Excel(以最简单的方式呈现) -
zhoujiabin810812:
简介明了!
黑莓(BlackBerry)是什么 -
WiseNeuron:
谢谢。标记一下
240多个jQuery插件
Java中的网络编程是一个很重要的部分,也是其编程优越性的地方之一。在Java中有一个专门的Java.net类库来管理网络编程的有关方法。
下面先介绍在Java中怎样用socket进行客户与服务器通信。最后再介绍一个一个最简单的通话程序。
一.怎样用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类来实现的。下面我们通过一个网络编程的实例来说明如何进行网络通信。
二.一个最简单的通话程序
通话器服务器:
通话器服务器:
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);
}
}
}
通话器客户端
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);
}
}
}
通话器服务器: 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); } } } 通话器客户端 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); } } } |
发表评论
-
你想知道您的那个端口号被那个程序占用了吗?
2009-09-14 18:24 2565以下文章主要以80端口号为例,如果想知道其他的端口号也可以使用 ... -
在电话接入时处理音频播放
2009-08-11 00:56 985通话是手机最重要的功能,手机来电会抑制正在运行的MIDlet运 ... -
单向陷门函数
2009-08-11 00:55 2715单向陷门函数(One-way Trapdoor Functio ... -
RSA加密算法
2009-08-11 00:54 27681. 密钥的产生① 选两个 ... -
数据加密标准DES
2009-08-11 00:54 1495数据加密标准DES 数据加密算法(Data Encryp ... -
C/S模式中的远程方法调用
2009-08-11 00:52 2072摘要 基于C/S设计模式, ... -
Java加密和数字签名编程快速入门
2009-08-11 00:51 680文/jwsh1984 本文主要谈一下密码学中的加密和 ... -
Vigenere密码与Playfair密码 收
2009-08-11 00:50 3998维吉尼亚(vigenere)密码,美国南北战争期间联军广泛 ... -
java实现DES加密算法
2009-08-11 00:49 2410一、java实现DES加密算法 为了实现一对密钥对整个项目所有 ... -
DES算法理论
2009-08-11 00:48 1415DES算法理论 本世纪五 ... -
欧拉函数
2009-08-11 00:47 1607当n为1至1000的整数时的值 ... -
悖论概念
2009-08-11 00:47 792其定义可以这样表述:由一个被承认是真的命题为前提,设为B,进行 ... -
生日悖论
2009-08-11 00:45 1830生日悖论是指,如果一个房间裡有23个或23个以上的人,那么至少 ... -
TCP/IP端口基础常识大全
2009-08-11 00:44 780端口可分为3大类: 1) 公认端口(Well Known Po ... -
嵌入式处理器的基本概念
2009-08-11 00:42 1070嵌入式系统的核心部件是各种类型的嵌入式处理器,目前全世界嵌入式 ... -
嵌入式实时操作系统的现状和未来
2009-08-11 00:42 1237内容摘要:从RTOS(嵌入式实时操作系统)发展的历史、RTOS ... -
网络编程--WININET
2009-08-11 00:40 1592一个Internet客户端程序的目的是通过Interne ... -
Mod运算
2009-08-11 00:37 1703模p运算 给定一个正整数p,任意一个整数n,一定存在等式 ... -
欧拉定理 (数论)
2009-08-11 00:36 1645在数论中欧拉定理(也称费马-欧拉定理或欧拉函数定理: 若m,a ... -
数字签名和加密
2009-08-11 00:36 3852具体步骤如下。Alice与Bob互换公钥。Alice用自己的私 ...
相关推荐
本项目提供的"TCPSocket 和UDP通信java聊天室源文件"是一个很好的实践案例,用于学习如何在Java中实现这两种协议的聊天室功能。下面将详细阐述TCP与UDP的特点、Java中Socket编程的基本概念以及如何运用这些知识来...
在本文中,我们将深入探讨基于Java的TCP和UDP协议的echo程序,并解析如何使用Socket类来创建这两个协议的基础应用。 首先,TCP(传输控制协议)是一种面向连接的、可靠的传输协议,它保证了数据包的顺序和完整性。...
在IT行业中,网络通信是至关重要的一个领域,而TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)则是两种最常使用的传输层协议。本篇将深入探讨如何在Java环境中使用Socket进行TCP和UDP的文件...
**Socket**,也称为套接字,是网络通信中的一个抽象概念,它代表了两台机器之间的通信端点。Socket允许应用程序发送和接收数据,而无需关心底层网络协议的复杂性。在Internet上,TCP/IP协议栈是最常见的网络协议,...
下面是一个简单的TCP服务器和客户端示例: ```java // 服务器端 ServerSocket server = new ServerSocket(8080); Socket client = server.accept(); BufferedReader in = new BufferedReader(new InputStreamReader...
在本文中,我们将深入探讨如何使用Java开发一个简单的即时通讯工具。即时通讯工具,或IM(Instant Messaging),是人们日常工作中不可或缺的一部分,它允许用户实时发送消息、进行语音或视频通话,甚至分享文件。...
Socket编程是计算机网络编程中的重要组成部分,主要用于实现进程间的通信,包括在同一台机器上的进程间通信,也包括跨网络的进程通信。在标题和描述中提到的“Socket的TCP、UDP通讯”涵盖了两种主要的传输层协议:...
1. **创建Socket**:在Java中,创建一个UDP Socket需要实例化`DatagramSocket`类。服务器端通常先创建Socket并绑定到特定的IP地址和端口号,以便接收数据报文。 ```java DatagramSocket serverSocket = new ...
Java电话系统是一个基于J2SE(Java 2 Standard Edition)平台开发的小程序,它展示了如何利用Java编程语言来实现一个电话通信系统的核心功能。在这个项目中,开发者可能涉及了网络通信、多线程、对象交互等多个Java...
Java网络编程是开发分布式应用程序的关键技术,特别是在当前互联网时代,其重要性不言而喻。本文将深入探讨Java网络编程的基础知识,重点关注TCP和UDP两种主要的网络协议及其在Java中的实现。 首先,网络编程的核心...
例如,在Java中创建一个简单的TCP服务器通常涉及到以下步骤: 1. 创建一个`ServerSocket`实例,绑定到特定端口。 2. 调用`accept()`方法等待客户端连接请求。 3. 处理连接后,读取客户端发送的数据或向客户端发送...
【Java桌面聊天室】是一个利用Java编程语言实现的本地客户端应用程序,它允许用户在桌面环境中进行实时交流。这个项目的核心是构建一个简单的聊天系统,让用户能够发送文本消息、表情符号和其他基本的沟通元素。通过...
例如,以下是一个简单的Java UDP客户端和服务器端示例: ```java // 客户端 public class UDPSender { public static void main(String[] args) throws Exception { String message = "Hello, Oracle!"; byte[] ...
在IT行业中,网络通信是至关重要的一个领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种最常使用的传输层协议。本篇文章将深入探讨这两种协议,并通过简单的服务端实例来帮助理解它们的工作原理。 首先,...
- **UDP**:用户数据报协议(User Datagram Protocol),是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 更适用于实时性和速度要求较高的场景,如视频直播、在线游戏等。 #### 实验原理 - ...
本篇将主要聚焦于Java语言中的网络编程,基于"网络编程的简单demo"这一主题,结合"Java笔记11号"的内容,探讨TCP和UDP这两种主要的传输协议,并通过"udp"和"socket"这两个关键词来解析相关知识点。 首先,让我们从...
- **LT(Level Triggered,水平触发)**:只要一个文件描述符的读写状态发生变化,就会一直报告该事件,直到程序处理并清除该事件。 - **ET(Edge Triggered,边缘触发)**:只报告状态变化的边缘,即从就绪变为未...
设计Java聊天室的主要目的是提供一个简单易用、安全可靠的聊天环境,促进用户的社交互动。此外,该项目的实施有助于加深对Java网络编程、多线程处理、并发控制等技术的理解,提高软件开发能力,对提升毕业生的专业...
"FileServer"和"ClientApplication"则可能是实际的Java程序,它们可能展示了如何利用RUDP进行文件传输,这是可靠数据传输的一个典型应用场景。 学习和理解RUDP不仅有助于开发实时通信应用,也对深入理解网络协议和...