黑马程序员_网络编程小结

来源:互联网 发布:数据填报系统 编辑:程序博客网 时间:2024/06/05 23:05

----------android培训、java培训、期待与您的交流-----------

总结:发生数据之前需要先有个目的(UDP),或者先建立平台(TCP)

UDP:面向无连接,所以先启动服务端还是客户端无所谓

--------------------------UDP发送端----------------------------------------

// 创建UDP服务DatagramSocket ds = new DatagramSocket(8000);while (true) {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));byte[] data = br.readLine().getBytes();//打包数据(包含目的地)DatagramPacket p = new DatagramPacket(data, data.length,InetAddress.getByName("27.151.71.184"), 10000);ds.send(p);//发送



--------------------------UDP接收端----------------------------------------

//接收端:// 创建UDP服务DatagramSocket socket = new DatagramSocket(10000);while (true) {byte[] buf = new byte[1024];//创建存储的包裹DatagramPacket packet = new DatagramPacket(buf, buf.length);// 等待接受数据socket.receive(packet);// 已接受到数据String ip = packet.getAddress().getHostAddress();String data = new String(packet.getData(), 0, packet.getLength());int port = packet.getPort();System.out.println(ip + " " + data + " " + port);}

注意:DatagramPacket构造中有含地址为发送时的包裹


TCP:需要先启动服务端

--------------------------TCP服务端----------------------------------------
ServerSocket server = new ServerSocket(10000);System.out.println("等待客户端连接...");Socket client = server.accept();PrintStream ps = new PrintStream(client.getOutputStream(),true);while (true) {BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));String ip=client.getInetAddress().getHostAddress();System.out.println("等待"+ip+"传输数据...");String originData = br.readLine();//readLine这个方法已/r/n结束,所以传入的数据必须包含if("over".equals(originData))break;String newData = originData.toUpperCase();ps.println(newData);}client.close();server.close();



--------------------------TCP客户端----------------------------------------

Socket client = new Socket(InetAddress.getByName("110.84.200.94"),10000);BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));PrintStream ps = new PrintStream(client.getOutputStream(),true);BufferedReader output = new BufferedReader(new InputStreamReader(System.in));while (true) {System.out.println("等待输入...");ps.println(output.readLine());String res = input.readLine();if (res != null) {System.out.println(res);continue;}break;}client.close();


--------------------------TCP文件上传服务端----------------------------------------

public class Server {public static void main(String[] args) throws Exception {ServerSocket server = new ServerSocket(10000);while (true) {System.out.println("等待客户端连接...");Socket client = server.accept();new Thread(new Service(client)).start();Thread.sleep(200);//为了控制台显示方便}}private static final class Service implements Runnable {private Socket client;private String ip;public Service(Socket client) {this.client = client;}@Overridepublic void run() {try {//以ip为文件名ip = client.getInetAddress().getHostAddress();System.out.println(ip+":正在上传文件");InputStream fis = client.getInputStream();File file = new File("D:\\TCP", ip+".jpg");file.getParentFile().mkdir();file.createNewFile();FileOutputStream fos = new FileOutputStream(file);PrintStream ps = new PrintStream(client.getOutputStream());int len = 0;byte[] buf = new byte[1024];while ((len = fis.read(buf)) != -1) {fos.write(buf, 0, len);fos.flush();}ps.println("文件上传完毕");fos.close();} catch (Exception e) {throw new RuntimeException(ip + ":上传文件失败:"+e.getMessage());}}}}

--------------------------TCP文件上传客户端端----------------------------------------

public class Client {public static void main(String[] args) throws Exception {Socket client = new Socket(InetAddress.getByName("110.84.200.94"),10000);FileInputStream fis = new FileInputStream(new File("C:\\1.jpg"));OutputStream os = client.getOutputStream();int len = 0;byte[] buf = new byte[1024];while ((len = fis.read(buf)) != -1) {os.write(buf, 0, len);os.flush();}client.shutdownOutput();// 标记输出流操作完毕,不然服务端还会一直读,报 Connection reset异常String res = new BufferedReader(new InputStreamReader(client.getInputStream())).readLine();System.out.println(res);client.close();}}

注意:

client.shutdownOutput();// 标记输出流操作完毕,不然服务端还会一直读,报 Connection reset异常

0 0
原创粉丝点击