网络编程
Socket传输String
服务器
try {
//创建服务器Socket 指定端口并开始监听
ServerSocket serverSocket = new ServerSocket(8800);
//通过accept等待客户端触发通信
Socket socket = serverSocket.accept();
//打开输入流输出流
InputStream is =socket.getInputStream();
//获取客户端信息
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while (!((info = br.readLine())==null)){
System.out.println("我是服务器,客户端登录信息为:"+info);
}
br.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
客户端
//创建客户端Socket连接 用来指定服务器的位置以及端口
try {
Socket socket = new Socket("localhost",8800);
//打开输入输出流
OutputStream os = socket.getOutputStream();
//准备信息
String info="用户名: tom 密码: 123456";
os.write(info.getBytes());
//关闭资源
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
Socket传输对象
服务器 try { //创建服务器Socket 指定端口并开始监听 ServerSocket serverSocket = new ServerSocket(8800); //通过accept等待客户端触发通信 Socket socket = serverSocket.accept(); //打开输入流输出流 InputStream is =socket.getInputStream(); ObjectInputStream ois = new ObjectInputStream(is); User user = (User)ois.readObject(); System.out.println("我是服务器 接收到的信息:"+user.getUserName()+"--"+user.getPWB()); is.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }
客户端 //创建客户端Socket连接 用来指定服务器的位置以及端口 try { Socket socket = new Socket("localhost",8800); //打开输入输出流 OutputStream os = socket.getOutputStream(); User u = new User("TOM","123456"); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(u); socket.shutdownOutput(); String info="用户名: tom 密码: 123456"; os.write(info.getBytes());*/ //关闭资源 oos.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); }
方法类 调用 Serializable 接口 public class User implements Serializable { //属性 private String userName; private String PWB; public User(String userName, String PWB) { this.userName = userName; this.PWB = PWB; } public User() { } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPWB() { return PWB; } public void setPWB(String PWB) { this.PWB = PWB; } }
Socket线程使用
服务器 try { //创建服务器Socket 指定端口并开始监听 ServerSocket serverSocket = new ServerSocket(8800); //通过accept等待客户端触发通信 Socket socket = null; //监听一直在进行 while (true){ socket = serverSocket.accept(); LoginThread loginThread = new LoginThread(socket); loginThread.start(); } } catch (IOException e) { e.printStackTrace(); }
客户端 //创建客户端Socket连接 用来指定服务器的位置以及端口 try { Socket socket = new Socket("localhost",8800); //打开输入输出流 OutputStream os = socket.getOutputStream(); User u = new User("TOM","1213456783"); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(u); socket.shutdownOutput(); String info="用户名: tom 密码: 123456"; os.write(info.getBytes());*/ //关闭资源 oos.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); }
线程类 public class LoginThread extends Thread{ Socket socket = null; //每启动一个线程 都需要想对象的Socket public LoginThread(Socket socket) { this.socket = socket; } @Override public void run() { try { InputStream is =socket.getInputStream(); ObjectInputStream ois = new ObjectInputStream(is); User user = (User)ois.readObject(); System.out.println("我是服务器 接收到的信息:" +user.getUserName()+"--"+user.getPWB()); is.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }
UDP协议的Socket编程
服务器
byte[] infos = new byte[1024]; //服务器 DatagramSocket socket = null; try { DatagramPacket dp = new DatagramPacket(infos , infos.length); socket = new DatagramSocket(5000); //接受客户端的数据包 socket.receive(dp); String info = new String(dp.getData(),0,dp.getData().length); System.out.println(dp.getAddress().getHostAddress()+"说: "+info); } catch (IOException e) { e.printStackTrace(); } finally { socket.close(); }
客户端
DatagramSocket socket = null; //客户端 String info = "你好我想资讯一个问题"; byte[] infos = info.getBytes(); try { InetAddress ia = InetAddress.getByName("localhost"); DatagramPacket dp = new DatagramPacket(infos,infos.length,ia,5000); //客户端使用Socaet对象 socket = new DatagramSocket(); //通过DatagramSocket 对象发送数据包到服务器中 socket.send(dp); } catch (UnknownHostException | SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { socket.close(); }