zoukankan      html  css  js  c++  java
  • Java 简单的 socket 编程入门实战

    这个是给女朋友写的:)

    首先需要知道我们每个电脑都可以成为server(服务器) 和 client(客户端)

    我们需要使用java来实现客户端与服务器的数据传输

    先帖上代码

    注意这里两张代码处于两个java project 中,因为我们实际上情况上是两台电脑来运行,但是由于演示方便这里就本机既充当

    客户端也充当服务器。。。。。

    服务端::

    package net;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class Server {
    	
    	public Server()
    	{
    		try {
    			// conn为connection的缩写;ServerSocket服务器端口
    			// 后面ServerSocket(1234)里面的1234为端口号,要大于 1024小于65535.   0~1024为系统预留的端口号,总共一共有65535个端口号
    			ServerSocket ss = new ServerSocket(1234);  // 服务器新建一个端口,端口号为1234
    			System.out.println("成功启动服务器,等待客户端连接!!!!!!!");
    			
    			Socket tcpConn = ss.accept(); // 接收客户端的链接
    			// tcpConn.getInetAddress()获取连入服务器的客户端的ip地址; tcpConn.getPort()获取连入服务器的客户端的端口号
    			System.out.println("收到客户端连接,来自:" + tcpConn.getInetAddress() + ":" + tcpConn.getPort());
    			
    			// 读取客户端给服务器的东西,并且返回东西给客户端
    			InputStream in = tcpConn.getInputStream(); // 获取数据
    			Scanner netIn = new Scanner(in); // 用这个方法可以获取客户端传过来的数据,但不是很好。接收传过来的东西
    			OutputStream out = tcpConn.getOutputStream();
    			
    			String receiveStr = netIn.nextLine(); // 读取客户端给服务器的东西,存在变量里面
    			System.out.println("收到来自客户端得数据:" + receiveStr);
    			
    			String returnStr = "0.0" + receiveStr + "
    "; // 后面加了一个
    是为了配合Scanner方法
    			out.write(returnStr.getBytes()); // 将这个东西返回到客户端
    			System.out.println("返回给客户端的数据:" + returnStr);
    
    			
    			// 全部关闭
    			in.close();
    			out.close();
    			
    			tcpConn.close();
    			
    			ss.close();
    			
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		new Server();
    
    	}
    
    }
    

      

    客户端::

    package net;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    
    public class Client {
    	
    	public Client()
    	{
    		try {
    			// new一个端口出来,前面的"127.0.0.1"为本机的ip地址,后面的1234为需要连接的服务器的端口号
    			Socket tcpConn = new Socket("127.0.0.1",1234);
    			System.out.println("成功连接到服务器!!!!!!!");
    			
    			// 向服务器发送东西,并且接受服务器的返回
    			InputStream in = tcpConn.getInputStream();
    			OutputStream out = tcpConn.getOutputStream();
    			Scanner netIn = new Scanner(in); // 这个是为了接收传过来的东西
    			
    			System.out.println("请输入要发送给服务器的数据:");
    			Scanner keyIn = new Scanner(System.in);// 读取键盘输入
    			String str = keyIn.nextLine() + "
    "; // 读取键盘输入,赋值给字符串
    			out.write(str.getBytes());//写入流操作必须是字节类型写入
    			
    			String returnStr = netIn.nextLine(); // 接收服务器传过来的东西,赋值给一个字符串
    			System.out.println("接收到来自服务器的返回数据:" + returnStr);
    			
    			in.close();
    			out.close();
    			
    			tcpConn.close();
    			
    			
    		} catch (UnknownHostException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		new Client();
    
    	}
    
    }
    

      注意运行时,用编译器ide运行是不行的,因为编译器无法同时运行两个主函数

          所以我们需要使用控制台cmd来操作两个项目

          ————————如何使用cmd的方法当然也有哦::点击进入查看如何使用cmd运行java 

     执行结果如下:

    服务器

    客户端

    以上谢谢学习!!!

  • 相关阅读:
    Batch
    Batch
    《mysql必知必会》学习_第17章
    指针实现时间复杂度为O(n*logN)的排序算法(归并排序算法)
    《自控力》读书笔记
    Leetcode 49. Group Anagrams (242.Valid Anagram)
    Leetcode43. Multiply Strings
    Leetcode 233. Number of Digit One
    Python 格式化输出占位符替换
    Python字符串拼接
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/6759313.html
Copyright © 2011-2022 走看看