初次学习java的网络编程,看着书上以及网上查到的一些知识自己写了下服务器及客户端的代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* Created by 123456 on 2017/3/18.
*/
public class UDPEchoserver {
private static final int ECHOMAX = 100; //接收缓冲区的大小
public static void main(String[] args) throws IOException {
int servPort = 12345;
DatagramSocket socket = new DatagramSocket(servPort); //创建服务器端的套接字
DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX],ECHOMAX); //创建数据报文
while (true){
socket.receive(packet);
String recvstr = new String(packet.getData() , 0 ,packet.getLength());
System.out.println( recvstr);//接收数据报文并打印源地址和端口号
int port = packet.getPort();
InetAddress addr = packet.getAddress();
String sendStr = "hello ! I'm server";
byte[] sendBuf;
sendBuf = sendStr.getBytes();
DatagramPacket sendpacket = new DatagramPacket(sendBuf,sendBuf.length,addr,port);
System.out.println("Handling client at " + packet.getAddress().getHostAddress() +
" on port "+ packet.getPort());
socket.send(sendpacket);//发送信息
}
}
}
import java.io.IOException; import java.io.InterruptedIOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; /** * Created by yy on 2017/3/18. */ public class UDPEchoClientTimeout { private static final int TIMEOUT = 3000; //设置超时间隔 private static final int MAXTRIES = 5; //设置连接次数 public static void main (String [] args)throws IOException{ Scanner input = new Scanner(System.in); String sendStr = input.next(); //输入要发送的内容 byte[] sendbuf; sendbuf = sendStr.getBytes(); InetAddress serverAddress = InetAddress.getByName("127.0.0.1"); int port = 12345; //创建端口号及地址 DatagramSocket socket = new DatagramSocket(); socket.setSoTimeout(TIMEOUT); DatagramPacket sendPacket = new DatagramPacket(sendbuf,sendbuf.length,serverAddress,port);//发送数据报文 DatagramPacket receivePacket = new DatagramPacket(new byte[100],100);//设置接收的范围 int tries = 0; boolean receivedResponse = false; do { socket.send(sendPacket); try { socket.receive(receivePacket); receivedResponse = true; }catch (InterruptedIOException e){ tries += 1; System.out.println("Timed out, "+ (MAXTRIES - tries)+" more tries..."); //输出连接的次数 } }while ((!receivedResponse)&&(tries<MAXTRIES)); if (receivedResponse){ System.out.println("Received: "+new String(receivePacket.getData()));//打印接收到的信息 }else { System.out.println("No response -- giving up.");//连接失败提示 } socket.close(); } }