![java网络编程应该怎样在客户端和服务器间实现通信?,第1张 java网络编程应该怎样在客户端和服务器间实现通信?,第1张](/aiimages/java%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%BA%94%E8%AF%A5%E6%80%8E%E6%A0%B7%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%92%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%97%B4%E5%AE%9E%E7%8E%B0%E9%80%9A%E4%BF%A1%EF%BC%9F.png)
以前写的,照贴了。。。
服务器端:import java.awt.*\x0d\x0aimport java.awt.event.WindowAdapter\x0d\x0aimport java.awt.event.WindowEvent\x0d\x0aimport java.io.*\x0d\x0aimport java.net.*/*6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和
客户端程序两部分。\x0d\x0a* 客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。\x0d\x0a* (20分)(服务端程序和客户端程序分别命名为Server.java和Client.java)*/\x0d\x0apublic class N4BT6 extends Frame\x0d\x0a{\x0d\x0aDatagramSocket socket \x0d\x0aDatagramPacket packet byte[] buf \x0d\x0aFile file \x0d\x0aFileInputStream input\x0d\x0aString message = "该文件不存在"\x0d\x0aTextArea text\x0d\x0apublic N4BT6(String title)\x0d\x0a{\x0d\x0asuper(title)\x0d\x0atext = new TextArea(6,4)\x0d\x0aadd(text)\x0d\x0asetSize(400, 300)\x0d\x0asetVisible(true)\x0d\x0aaddWindowListener(new WindowAdapter()\x0d\x0a{\x0d\x0apublic void windowClosing(WindowEvent e)\x0d\x0a{\x0d\x0adispose()\x0d\x0a}\x0d\x0a})\x0d\x0a\x0d\x0abuf = new byte[1024]\x0d\x0atry\x0d\x0a{\x0d\x0asocket = new DatagramSocket(1230)\x0d\x0apacket = new DatagramPacket(buf, buf.length)\x0d\x0asocket.receive(packet)\x0d\x0afile = new File(new String(packet.getData()))\x0d\x0asocket = new DatagramSocket()\x0d\x0a} \x0d\x0acatch (Exception e)\x0d\x0a{e.printStackTrace()\x0d\x0a}\x0d\x0a\x0d\x0aif(file.exists())\x0d\x0a{\x0d\x0atry\x0d\x0a{\x0d\x0abuf = new byte[(int)file.length()]\x0d\x0apacket = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234)\x0d\x0ainput = new FileInputStream(file)\x0d\x0ainput.read(buf)\x0d\x0asocket.send(packet)\x0d\x0a}\x0d\x0acatch (IOException e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0aelse\x0d\x0a{\x0d\x0atry\x0d\x0a{\x0d\x0apacket = new DatagramPacket(message.getBytes(),message.getBytes().length,\x0d\x0aInetAddress.getLocalHost(),1234)\x0d\x0asocket.send(packet)\x0d\x0a}\x0d\x0acatch (Exception e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0apublic static void main(String[] args)\x0d\x0a{\x0d\x0anew N4BT6("Server")\x0d\x0a}\x0d\x0a}\x0d\x0a客户端:import java.awt.*\x0d\x0aimport java.awt.event.*\x0d\x0aimport java.net.DatagramPacket\x0d\x0aimport java.net.DatagramSocket\x0d\x0aimport java.net.InetAddresspublic class N4BT6_2 extends Frame\x0d\x0a{\x0d\x0aTextArea text\x0d\x0aString message = "Q.txt"\x0d\x0aDatagramSocket socket \x0d\x0aDatagramPacket packet\x0d\x0abyte[] buf\x0d\x0apublic N4BT6_2(String title)\x0d\x0a{\x0d\x0asuper(title)\x0d\x0atext = new TextArea(6,4)\x0d\x0aadd(text)\x0d\x0asetSize(400, 300)\x0d\x0asetVisible(true)\x0d\x0aaddWindowListener(new WindowAdapter()\x0d\x0a{\x0d\x0apublic void windowClosing(WindowEvent e)\x0d\x0a{\x0d\x0adispose()\x0d\x0a}\x0d\x0a})\x0d\x0atry\x0d\x0a{\x0d\x0a\x0d\x0asocket = new DatagramSocket()\x0d\x0apacket = new DatagramPacket(message.getBytes(),message.getBytes().length,\x0d\x0aInetAddress.getLocalHost(),1230)\x0d\x0asocket.send(packet)\x0d\x0a}\x0d\x0acatch (Exception e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a\x0d\x0atry\x0d\x0a{\x0d\x0abuf = new byte[1024]\x0d\x0asocket = new DatagramSocket(1234)\x0d\x0apacket = new DatagramPacket(buf,buf.length)\x0d\x0asocket.receive(packet)\x0d\x0atext.append(new String(buf))\x0d\x0a}\x0d\x0acatch (Exception e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0apublic static void main(String[] args)\x0d\x0a{\x0d\x0anew N4BT6_2("Client")\x0d\x0a}\x0d\x0a}给你一个我写的示例,用的是基于TCP的Socket技术,你锻炼一下,改一改,不会改再找我!
客户端:
import java.net.Socket
import java.io.InputStream
import java.io.OutputStream
import java.io.InputStreamReader
import java.io.BufferedReader
public class TcpClient {
public static void main(String[] args) throws Exception
{
//创建客户端Socket服务,并且制定主机和duank
Socket s = new Socket("192.168.1.104",10002)//连接固定的主机和端口
//为了发送数据,获取Socket中的输入输出流
OutputStream out = s.getOutputStream()
InputStreamReader isr = new InputStreamReader(System.in)
BufferedReader br = new BufferedReader(isr)
String line = null
//读取服务器发过来的数据
InputStream in = s.getInputStream()
byte[] buf = new byte[1024]
while((line = br.readLine())!=null)
{
out.write(line.getBytes())
if("886".equals(line))
break
int len = in.read(buf)
String content = new String(buf,0,len)
System.out.println("Server:"+content)
}
s.close()
}
}
服务器:
/*
* 需求分析:
* 使用TCP协议,写服务器端。做到服务器能收到客户端的信息,也能向客户端发送信息
* */
package JavaNetProgramming
import java.net.ServerSocket
import java.net.Socket
import java.io.InputStream
import java.io.OutputStream
import java.io.InputStreamReader
import java.io.BufferedReader
public class TcpServer {
public static void main(String[] args) throws Exception
{
//建立服务器的Socket服务,并且监听一个端口
ServerSocket ss = new ServerSocket(10002)
Socket s = ss.accept()
InputStream is = s.getInputStream()
//从服务器端向客户端发送数据
OutputStream out = s.getOutputStream()
InputStreamReader isr = new InputStreamReader(System.in)
BufferedReader br = new BufferedReader(isr)
String line = null
while(true)
{
//通过accept()方法获得客户端传过来的Socket对象
// System.out.println("getByNanme():"+s.getInetAddress())
System.out.print("getHostAddress():"+s.getInetAddress().getHostAddress())
//获取客户端发过来的数据,就要使用客户端对象的读取流来读取数据
byte[] buf = new byte[1024]
int len = is.read(buf)//把流中数据读到字节数组中
String content = new String(buf,0,len)
System.out.println(" "+content)
if("886".equals(content))
break
while((line = br.readLine())!=null)
{
out.write(line.getBytes())
break
}
}
s.close() //循环内有判断语句,这句话才不出错
ss.close()
}
}
FTP 的主要 *** 作都是基于各种
命令基础之上的。常用的命令有: · 设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式· 目录 *** 作,改变或显示远程计算机的当前目录(cd、dir/ls 命令)· 连接 *** 作,open命令用于建立同远程计算机的连接;close命令用于关闭连接· 发送 *** 作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机· 获取 *** 作,get命令用于接收一个文件;mget命令用于接收多个文件。 编程思路 根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的 *** 作。 编程技巧说明 http://www.jacken.com.cn/Programming/Java/2008-10-24/Java-Articlea7b870512fe2bce0ffefc95c6800ca5d.html
评论列表(0条)