以前写过一个局域网通信工具,很简单的。但是这系列文章是用来解决新手问题的。所以打算写个最简单的demo。
废话少说,先来个基于TCP的。
上server端代码:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServiceSocket {
public static void main(String[] args) {
try {
// 1.建立一个服务器socket对象
ServerSocket ss = new ServerSocket(8888);
// 2.等待客户端连接
Socket s = ss.accept();// 等到客户端连接
// 通过输入输出流操作数据
InputStream is = s.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF());
OutputStream out = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("hello client!");
// 4.关闭数据流
dis.close();
is.close();
s.close();
ss.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端代码:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class MyClient {
public MyClient() {
}
public static void main(String[] args) {
try {
// 1.建立Socket对象
Socket client = new Socket("localhost", 8888);
// 2.通过socket对象的输入输出流操作数据
OutputStream out = client.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("hello service!");
InputStream is = client.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF());
System.out.println(client.getInetAddress());
System.out.println(client.getLocalPort());
System.out.println(client.getLocalSocketAddress());
System.out.println(client.getChannel());
// 3.关闭连接
dos.close();
out.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
再来一个基于UDP的。
server端代码:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class MyUDPServer {
public static void main(String[] args) {
byte b[] = new byte[100];
try {
DatagramPacket dp = new DatagramPacket(b, b.length);
DatagramSocket ds = new DatagramSocket(8888);
ds.receive(dp);
String s = "你发的数据是:" + new String(b).trim();
System.out.println(s);
dp = new DatagramPacket(s.getBytes(), s.getBytes().length,
dp.getAddress(), dp.getPort());
ds = new DatagramSocket();
ds.send(dp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Client端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 类说明:UDP数据包 udp 总结 1.将要发的数据先进行打包 使用的类是:DatagramPacket 2.发送打包好的数据
* 使用的类是:DatagramSocket (发送数据包) 注意事项:发送数据报是要知道目的地和目的端口号
* 所以要采用DatagramPacket(byte[] buf, int length,InetAddress address,int port)
* 因为发送的时候已经知道端口号 故发送DatagramSocket()不需要再写参数了
*
* 接收数据包: 1.接收的时候要将接受的数据打包DatagramPacket(byte[] buf, int length)
* 2.接收的时候要知道重那个端口接收 故使用的时候要DatagramSocket(int prot);
*
*/
public class MyUDPClient {
public static void main(String[] args) {
byte b[] = "hello udp server!".getBytes();
try {
InetAddress add = InetAddress.getByName("localhost");
DatagramPacket dp = new DatagramPacket(b, b.length, add, 8888);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
b = new byte[100];
dp = new DatagramPacket(b, b.length);
ds.receive(dp);
System.out.println(new String(b).trim());
} catch (Exception e) {
e.printStackTrace();
}
}
}
来于:http://blog.csdn.net/withiter/article/details/17226405#,有删改。