Main函数运行有错误

Main函数运行有错误

UdpServer.java

相关代码:

package com.example.imoocsample.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;

public class UdpServer {

    private InetAddress mInetAddress; //可以确定到指定的机器
    private int mPort = 7777; //可以确定到具体的应用程序
    private DatagramSocket mSocket;

    private Scanner mScanner;

    public UdpServer() {
        try {
            mInetAddress = InetAddress.getLocalHost();
            mSocket = new DatagramSocket(mPort, mInetAddress);

            mScanner = new Scanner(System.in);
            mScanner.useDelimiter("\n");

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    public void start() {
        while(true) { //不让server端退出
            try {
                byte[] buf = new byte[1024]; //UDP每次通信过程中,数据包的大小是有限制的
                DatagramPacket receivedPacket = new DatagramPacket(buf, buf.length);
                //将接受到的数据存到receivedPacket里面(数据来自于客户端)
                //而且receive方法是阻塞的,如果没有数据包到来的话,程序会一直阻塞在这个地方
                mSocket.receive(receivedPacket);

                InetAddress address = receivedPacket.getAddress(); //拿到客户端的地址
                int port = receivedPacket.getPort(); //拿到客户端的端口号
                //byte[] data = receivedPacket.getData(); //拿到客户端发的信息
                String clientMsg = new String(receivedPacket.getData(), 0, receivedPacket.getLength());
                System.out.println("address = " + address + " , port = " + port + " , msg = " + clientMsg);

                //通过.next()来读取一个String(此方法也是阻塞的,需要主动输入内容并按回车键)
                String returnedMsg = mScanner.next();
                byte[] returnMsgBytes = returnedMsg.getBytes();
                DatagramPacket sendPacket = new DatagramPacket(
                        returnMsgBytes,
                        returnMsgBytes.length,
                        receivedPacket.getSocketAddress() //也包含了地址的端口信息
                );
                mSocket.send(sendPacket);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        new UdpServer().start();
    }
}

UdpClient.java

相关代码:

package com.example.imoocsample.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class UdpClient {

    private String mServerIp = "114.83.151.240";
    private InetAddress mServerAddress;
    private int mServerPort = 7777;
    private DatagramSocket mSocket; //用来send和receive
    private Scanner mScanner; //数据通过控制面板输入

    public UdpClient() {
        try {
            mServerAddress = InetAddress.getByName("114.83.151.240"); //获取服务端的地址
            mSocket = new DatagramSocket();
            mScanner = new Scanner(System.in);
            mScanner.useDelimiter("\n"); //让空白后面的内容也能输出
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void start() {
        while(true) { //让客户端一直跑着

            try {
                String clientMsg = mScanner.next();
                byte[] clientMsgBytes = clientMsg.getBytes();
                DatagramPacket clientPacket = new DatagramPacket(
                        clientMsgBytes, 0, clientMsgBytes.length,
                        mServerAddress,
                        mServerPort
                );
                mSocket.send(clientPacket);

                byte[] buf = new byte[1024];
                DatagramPacket serverMsgPacket = new DatagramPacket(buf, buf.length);
                mSocket.receive(serverMsgPacket); //等着服务端返回数据过来

                String serverMsg = new String(serverMsgPacket.getData(), 0, serverMsgPacket.getLength());
                System.out.println("msg = " + serverMsg);

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        new UdpClient().start();
    }
}

先通过Run'UdpServer.main()' 运行时的报错:

相关代码:

18:17:15: Executing task 'UdpServer.main()'...

Executing tasks: [UdpServer.main()] in project E:\AndroidStudioProjects


> Configure project :av_loading_indicator_view_demo
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed in version 5.0 of the Android Gradle plugin.
For more information, see http://d.android.com/r/tools/update-dependency-configurations.html.

> Configure project :greendaodemo
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed in version 5.0 of the Android Gradle plugin.
For more information, see http://d.android.com/r/tools/update-dependency-configurations.html.

> Configure project :greendaopractice
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed in version 5.0 of the Android Gradle plugin.
For more information, see http://d.android.com/r/tools/update-dependency-configurations.html.

FAILURE: Build failed with an exception.

* Where:
Initialization script 'C:\Users\Administrator\AppData\Local\Temp\UdpServer_main__.gradle' line: 21

* What went wrong:
A problem occurred configuring project ':imoocsample'.
> Could not create task ':imoocsample:UdpServer.main()'.
   > SourceSet with name 'main' not found.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 6s
18:17:23: Task execution finished 'UdpServer.main()'.

然后通过Run'UdpServer.main()' with Coverage, 服务端和客户端都能运行成功

https://img1.sycdn.imooc.com//climg/6172909d096853ce07910225.jpg

但是客户端输入文本。按回车没有反应,服务端接收不到消息

https://img1.sycdn.imooc.com//climg/617290d8097291fd08190306.jpg

https://img1.sycdn.imooc.com//climg/617290e409bfa03f08220243.jpg

我怀疑是我windows电脑里下载的android studio里的设置问题,然后我用Mac下载了一个android studio,也建立了一个服务端文件和客户端文件,启动时还是报错

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
LovelyChubby 2021-10-22 21:20:56

FAILURE: Build failed with an exception. * Where: Initialization script 'C:\Users\Administrator\AppData\Local\Temp\UdpServer_main__.gradle' line: 21 * What went wrong: A problem occurred configuring project ':imoocsample'. > Could not create task ':imoocsample:UdpServer.main()'.    > SourceSet with name 'main' not found.

sourceset设置有错误

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师