java网络编程应该怎样在客户端和服务器间实现通信?

java网络编程应该怎样在客户端和服务器间实现通信?,第1张

以前写的,照贴了。。。服务器端: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}

JAVA软件开发开发框架多达几十种,瑭锦Tanjurd总结列举了3种最常见也是最常用方便的3种工具:

1、Struts:Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的

2、Spring:Spring是轻量级的J2EE应用程序框架。

3、Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以使用对象编程思维来 *** 纵数据库。Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化。它还可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用

给你一个我写的示例,用的是基于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()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11138392.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存