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

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

以前写的,照贴了。。。服务器端:import java.awt.*

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

import java.io.*

import java.net.*/*6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。

* 客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。

* (20分)(服务端程序和客户端程序分别命名为Server.java和Client.java)*/

public class N4BT6 extends Frame

{

DatagramSocket socket

DatagramPacket packet byte[] buf

File file

FileInputStream input

String message = "该文件不存在"

TextArea text

public N4BT6(String title)

{

super(title)

text = new TextArea(6,4)

add(text)

setSize(400, 300)

setVisible(true)

addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

dispose()

}

})

buf = new byte[1024]

try

{

socket = new DatagramSocket(1230)

packet = new DatagramPacket(buf, buf.length)

socket.receive(packet)

file = new File(new String(packet.getData()))

socket = new DatagramSocket()

}

catch (Exception e)

{e.printStackTrace()

}

if(file.exists())

{

try

{

buf = new byte[(int)file.length()]

packet = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234)

input = new FileInputStream(file)

input.read(buf)

socket.send(packet)

}

catch (IOException e)

{

e.printStackTrace()

}

}

else

{

try

{

packet = new DatagramPacket(message.getBytes(),message.getBytes().length,

InetAddress.getLocalHost(),1234)

socket.send(packet)

}

catch (Exception e)

{

e.printStackTrace()

}

}

}

public static void main(String[] args)

{

new N4BT6("Server")

}

}

客户端:import java.awt.*

import java.awt.event.*

import java.net.DatagramPacket

import java.net.DatagramSocket

import java.net.InetAddresspublic class N4BT6_2 extends Frame

{

TextArea text

String message = "Q.txt"

DatagramSocket socket

DatagramPacket packet

byte[] buf

public N4BT6_2(String title)

{

super(title)

text = new TextArea(6,4)

add(text)

setSize(400, 300)

setVisible(true)

addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

dispose()

}

})

try

{

socket = new DatagramSocket()

packet = new DatagramPacket(message.getBytes(),message.getBytes().length,

InetAddress.getLocalHost(),1230)

socket.send(packet)

}

catch (Exception e)

{

e.printStackTrace()

}

try

{

buf = new byte[1024]

socket = new DatagramSocket(1234)

packet = new DatagramPacket(buf,buf.length)

socket.receive(packet)

text.append(new String(buf))

}

catch (Exception e)

{

e.printStackTrace()

}

}

public static void main(String[] args)

{

new N4BT6_2("Client")

}

}

Socket通信

作为服务器端:

//生成服务器端,监听服务器设定的端口

ServerSocket

socketServer

=

new

ServerSocket(端口号)

//建立客户端和服务器端的链接,这时再看客户端

Socket

socket

=

socketServer.accept()

作为客户端:

//新建一个Socket,包含服务器端的IP和端口号,这样在服务器启动情况下可以建立和服务器的链接.

Socket

socket

=

new

Socket("IP地址","端口号")

这时,服务器端和客户端的连接已经建立,如果需要通信和传输数据的话分别在服务器端、客户端新建流对象,可以通过流对象实现双方之间的互通.

有关流的内容自己看书体会下就能写出B/S结构的通信了。

你可以在每个用户连上服务器端时,都发送一个消息,就是用4个字节表示是用户的ID,并将与用户通信的socket,用一个HashMap存储起来,而不是用LinkList。

后面如果A发送消息给C,就把A的前四个字节(即ID)取出来,在HashMap中找到与C通信的socket,然后把消息通过socket发送出去····

这部分代码应该很容易实现的,Socket通信这东西,理清了思路就很好弄了~~


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/186580.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存