java编写客户端(怎么用java编写简单客户端程序)

本文目录
- 怎么用java编写简单客户端程序
- 通过java中的socket技术编写能够回显客户端输入的多线程服务器端
- 怎么用Java开发FTP客户端
- 用java socket 写一个简单的 聊天 客户端与服务器端之间 都能实现 一个不
- 关于java网络通信中客户端设计方式
怎么用java编写简单客户端程序
我这里有一个例子希望能够帮助你
public class Client{
private Socket socket;
try{
Socket socket=new Socket ("localhoast’,8088);
ip=InetAddress.getLocalHost();
String localip=ip.getHostAddress();
System.out.println(localip);
String name=ip.getHostName();
System.out.println(name);
}
catch(Exception e){
}
public void start(){
try{
Run r2=new Run();
Thread t1=new Thread(r2);
t1.setDaemon(true);
t1.start();
Scanner sc=new Scanner(System.in);
OutputStream os=socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
PrintWriter writer=new PrintWriter(osw,true);
while(true){
writer.println(sc.nextLine());
}
}catch(Exception e){
}
}
public static void main(String args){
Client client=new Client();
client.start();
}
class Run implements Runnable{
public void run() {
while(true){
try {
InputStream is=socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
while(true){
String str=br.readLine();
System.out.println("服务器说:"+str);
if("bye".equals(str)){
System.out.println("再见客户端");
System.out.println("聊天结束");
}
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
通过java中的socket技术编写能够回显客户端输入的多线程服务器端
import java.io.*;
import java.net.*;
public class EchoServer {
public static void main(String args) {
new EchoServer().startServer();
}
boolean bstop=false;
public void startServer() {
try {
//创建服务器,并开放88端口
ServerSocket server=new ServerSocket(88);
System.out.println("服务于88端口\n客户端发exit/quit结束当前连接;发stop停止服务器");
while(!bstop){
//监听服务器端口,一旦有数据发送过来,那么就将数据封装成socket对象
//如果没有数据发送过来,那么这时处于线程阻塞状态,不会向下继续执行
Socket socket=server.accept();
System.out.println("客户端信息:"+socket.getRemoteSocketAddress());
new EchoThread(socket).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
class EchoThread extends Thread{
private Socket socket;
public EchoThread(Socket socket){
this.socket=socket;
}
public void run(){
BufferedReader br=null;
PrintWriter pw=null;
try {
//从socket中得到读取流,该流中有客户端发送过来的数据
//InputStreamReader将字节流转化为字符流
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw=new PrintWriter(socket.getOutputStream());
pw.println("客户端发exit/quit结束当前连接;发stop停止服务器\n");
pw.flush();
String info;
while((info=br.readLine())!=null){//行读取客户端数据
System.out.println(info);
pw.println(info);
pw.flush();
if("quit".equals(info) || "exit".equals(info)){
break;
}else if("stop".equals(info)){
bstop=true;
System.exit(0);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {pw.close();} catch (Exception e) {}
try {br.close();} catch (IOException e) {}
try {socket.close();} catch (IOException e) {}
}
}
}
}
怎么用Java开发FTP客户端
摘要
本文解释了如何利用库用Java语言编写FTP客户端代码。它比较了FTP库的一个完全列表,演示了每个库的优点和缺点,并且帮助决策者为他们的需要选择适当的库。另外,本文阐述了Fa?ade模式如何在取代一个库时改变管理。最后,作者Jean-Pierre Norguet讨论并解决了由于缺乏权威性的说明书引起的一些问题。
让我们假设一个情景:我们要编写一个纯Java应用程序,该程序必须从运行FTP服务器的远程计算机上下载文件。我们也通过远程文件信息,像名字、日期、或者尺寸,来过滤下载。
自己来写一个FTP协议处理,尽管是有可能,并且可能很有趣。但是这样做也有可能有困难、花费长时间、并且有潜在的风险。既然我们不肯花费时间、精力、或者金钱自己来写一个处理器,那我们推荐使用一个可重用的现有的软件组件。万维网上有并且大量的库可供使用。有了一个FTP客户端库,下载一个文件用Java语言编写就像下面一样简单:
FTPClient ftpClient = new FTPClient();
ftpClient.connect("ftp.foo.com", "user01", "pass1234");
ftpClient.download("C:\\Temp\\", "README.txt");
// Eventually other operations here ...
ftpClient.disconnect();
寻找一个适合我们需要的高质量的Java FTP客户端库并不像他看起来那么简单;它可能相当困难。要找到一个Java FTP客户端库需要花一些时间。接着,在我们找到所有的已存在的库之后,我们选哪个?每个库适合不同的需要。库在质量上是不等的,并且它们的设计有本质的区别。每个提供一套不同的属性和使用不同类型的行话来描述他们。
因此,计算和比较FTP客户端库证明是困难而且令人迷惑的。重复使用已存在的组件是一个值得推荐的过程,但在这个例子中,启动它也是令人沮丧的。并且这有点羞愧:在选好的一个好的FTP库之后,剩下的工作就是例程了。
本文旨在使选择过程简短、容易、并且有价值。我首先列出了所有的FTP客户端库。接着,我定义和描述了库应该用某种方式找到的相关标准的一个表格。最后,我列出了一个总浏览的矩阵,该矩阵给出了库间相互比较的过程的快速浏览。所有的信息提供了我们作出一个迅速、可靠、和长期的决定所需的每件事。
使用JDK(Java 开发工具集)的FTP支持
用于FTP的访问规范是用于注释的请求:959(RFC959)。Sun Microsystems提供了JDK的一个RFC959执行。但是它是内部的、非文档化的、并且不提供任何资源。当RFC959在尚未公开时,它实际上是执行RFC1738、URL规范的一个公共界面的后终端。如图1。
图1. 使用JDK的FTP支持。
RFC1738的一个执行过程在JDK中作为标准给出。它为基本的FTP传送做一个可推理的工作。它是公共的、文档化的、并且提供源代码。要使用它,我们可编写下面语句:
URL url = new URL("ftp://user01:pass1234@ftp.foo.com/README.txt;type=i");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream(); // To download
OutputStream os = urlc.getOutputStream(); // To upload
使用JDK的FTP客户端严格的遵守标准推荐,但它有以下几个说明:
它从根本上区别于第三方的FTP客户端库;这些执行RFC959而不是RFC1738
RFC959用大多数的桌面FTP客户端工具执行。许多Java程序员使用这些工具连接到FTP服务器上。作为一个尝试,这些工具及有可能优先于类似的RFC959库。
URL 和URLConnection类只开放用于通讯的流。Sun库不为构造原始的FTP服务器响应成为像String、 File、 RemoteFile、 或者 Calendar之类的更合用的Java对象而提供直接支持。所以我们不得不编写更多的代码,只是为了把数据写入一个文件中或者开始一个目录列表。
正像RFC1738的3.2部分解释的一样,"最优化",FTP URL在每个操作后要求关闭(控制)连接。这对于传送许多小文件是一种浪费、并且毫无效率。而且,作了特别限制FTP服务器可能把会这样一个通讯开销认为一个是恶毒的网络攻击或者滥用而拒绝提供进一步的服务。
最后,它缺乏几个有用的属性。
由于以上所有或者某种原因,可优先使用一个第三方的库。下面部分列出了可供选择的第三方的库。
***隐藏网址***
用java socket 写一个简单的 聊天 客户端与服务器端之间 都能实现 一个不
客户端代码:
package net;
import java.net.*;
import java.io.*;
public class socketclient {
public static void main(String args) {
Socket s = null;
InputStream is = null;
DataInputStream d = null;
OutputStream os = null;
DataOutputStream ds = null;
try {
s = new Socket("127.0.0.1", 1555);
is = s.getInputStream();
d = new DataInputStream(is);
os = s.getOutputStream();
ds = new DataOutputStream(os);
System.out.println(d.readUTF() + " from " + s.getPort());
String content = null;
while (true) {
content = new BufferedReader(new InputStreamReader(System.in))
.readLine();
ds.writeUTF("port# " + s.getLocalPort() + " says " + content
+ " to " + s.getPort());
ds.flush();
if (content.equalsIgnoreCase("Bye"))
break;
}
} catch (ConnectException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ds.close();
os.close();
d.close();
is.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器端代码:
package net;
import java.net.*;
import java.io.*;
public class socketserver {
public static void main(String args) {
Socket s = null;
OutputStream out = null;
DataOutputStream ds = null;
InputStream is = null;
DataInputStream d = null;
try {
ServerSocket ss = new ServerSocket(1555);
s = ss.accept();
out = s.getOutputStream();
ds = new DataOutputStream(out);
is = s.getInputStream();
d = new DataInputStream(is);
} catch (IOException e) {
e.printStackTrace();
}
try {
String content = null;
ds.writeUTF("Hello " + s.getInetAddress() + " port#"
+ s.getPort());
ds.flush();
while (true) {
content = d.readUTF();
System.out.println(content);
if (content.equalsIgnoreCase("Bye"))
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ds.close();
out.close();
d.close();
is.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
关于java网络通信中客户端设计方式
是的,最好是这样做,
你需要有两个队列,发送队列来接收队列。(vector,arraylist,hashtable或者Object都可以)
在程序设计中要时刻记得MVC模式, 设计出来的程序模块必须专业化, 绘图的就让它绘图,专业绘图,别让他处理逻辑, 联网的就专业联网,别让我去绘图。
所以,网络线程不要用来干别的事情,一旦程序中有消息要发送就立即放到发送消息队列中,在队列中排队,而网络线程干的事情就是按先来后到的原则把队列中的消息一个个发向服务端。
反过来,每次收到服务端发过来的消息, 网络线程不要去干涉它,也不要去处理它,而是把它放在接收队列中就不用管它了,自己又去干自己的专业活——联网收发。 而我们的程序逻辑就会去每隔一段时间去看看接收队列中是否己经有了消息来了,有了也按先来后到原则一个个处理,处理的结果如果需要更新界面的话,就通知专业绘图组件来绘图。
这样的一个系统,每个人都有自己的权力和职责,各司其位,互不干扰。 这才是MVC的好系统。 一旦产生错误和发现问题,我们就可以快速地定位问题出在哪里。 比如图画错了,我们就直接找绘图部门就行了,而不要去找联网部门了。那不是他们的责任。

本文相关文章:
学java需要注意什么(学习java软件开发课程要注意什么)
2026年9月6日 18:50
输入java成功javac不成功(为什么输入java有用输入javac就没用了)
2026年8月22日 08:30
javareplaceall用法(java replaceAll该怎么用)
2026年7月9日 01:20
javaweb在线投票系统(java web做个投票页面,不用注册,怎么限制用户投票次数(手机进入该页面))
2026年6月29日 01:40
js基本数据类型和引用数据类型(javascript中基本类型和引用类型的区别分析)
2026年6月8日 05:50
java集合图谱(java问题 如图,同样是Map集合的遍历为什么左图进行操作时报错了,右图没有报错,求大神)
2026年6月1日 12:10
unity3d编程语言(我是新手,问一下在Unity 3D中用C#更好还是javascript更好)
2026年5月12日 20:00
checked异常(在java中,异常处理的机制有哪几种,分别是什么)
2026年4月28日 15:15
更多文章:
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00
怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)
2026年9月7日 06:30
vba编写excel插件(excel vba中能否动态创建控件)
2026年9月7日 04:40
为什么控件属性点不了(c#引用的第三方控件,属性全部显示为灰色,属性值不可更改)
2026年9月7日 03:50
旅游网站设计思路和主要设计内容(旅游网站建设方案该如何进行设计)
2026年9月7日 01:50
野生菌十大名菌野生菌十大名菌分别是哪些?菌内有几种野生菌 野生的鸡枞菌是什么样子
2026年9月6日 23:50


