8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

从客户端向客户端发送 TCP/fork/socket

Melloware 2月前

53 0

我正在尝试编写一个聊天程序,协议是 TCP,两个文件是 server.c 和 client.c,如果客户端和客户端是通过 fork 创建的并且具有相同的套接字描述符,那么如何从客户端向客户端发送消息。没有...

我正在尝试编写一个聊天程序,协议是 TCP,两个文件是 server.c 和 client.c如果它们是通过 fork 创建的并且具有相同的套接字描述符,则如何从客户端向客户端发送消息。

无论我如何尝试发送消息,它都会出现在发送消息的同一控制台窗口中

帖子版权声明 1、本帖标题:从客户端向客户端发送 TCP/fork/socket
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Melloware在本站《sockets》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我正在尝试使用 Wifi Aware 技术在发布者和订阅者之间建立套接字连接。我正在关注来自 android 开发者网站的以下链接:https://developer.android.com/

    我正在尝试使用 Wifi Aware 技术在发布者和订阅者之间创建套接字连接。我正在关注来自 Android 开发者网站的以下链接:

    https://developer.android.com/develop/connectivity/wifi/wifi-aware#create_a_connection

    如上所述,我从订阅者发送一条消息,该消息在服务器端成功接收,但是当我在发布者上创建服务器套接字后请求网络时,既没有收到错误,也没有接收/创建任何网络:

    // 发布时调用的发布者回调方法。当消息发送成功时,它将调用 server.accept() 进行监听

    public void onMessageReceived(PeerHandle peer, byte[] message, Context mContext) {
        
       ......
       try{
          publisherSocket = new ServerSocket(0);
          publisherPort = publisherSocket.getLocalPort(0);
       }
        catch(...) {   .... }
    
       NetworkSpecifier networkSpecifier = new WifiAwareNetworkSpecifier.Builder(currentDiscoverySession,currentPublisherConnectedPeer).setPskPassphrase("some8Letter@").setPort(publisherPort).build;
    
       NetworkRequest publisherNetworkRequest = new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE).setNetworkSpecifier(networkSpecifier).build();
    
        ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback(){
           public void onAvailable(Network network) {
              // Problem is it was never called which means network not there
              currentDiscoverySession.sendMessage(currentPublisherConnectedPeer, 0, someDummyMessage);
           }
           
          .....};
    
       // Here ConnectivityManager is obatined using this.getSystemService(this.CONNECTIVITY_SERVICE) on onCreate of activity
       connectivityManager.requestNetwork(publisherNetworkRequest, callback);
    

    // 订阅调用时的回调方法

    public void onMessageReceived(PeerHandle peer, byte[] message, Context mContext) {
        
       NetworkSpecifier networkSpecifier = new WifiAwareNetworkSpecifier.Builder(currentDiscoverySession,peer).setPskPassphrase("some8Letter@").build();
       
       NetworkRequest subscriberNetworkRequest = new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE).setNetworkSpecifier(networkSpecifier).build();
    
       ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback(){
           public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities){
              .....
             WifiAwareNetworkInfo subscriberNetworkInfo = (WifiAwareNetworkInfo) networkCapabilities.getTransportInfo();
             
             subscriberSocket = network.getSocketFactory().createSocket(subscriberNetworkInfo.getPeerIpv6Addr(), subscriberNetworkInfo.getPort());
          // WRite some message using outputStream
          .....};
    
    
    

    我的清单文件:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="34"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    

    最小开发工具包:34 目标开发工具包:34

    我不知道为什么当我调用 requestNetworkMethod 时它没有通过 Wifi-Aware 返回任何网络。

    我尝试以毫秒为单位传递时间,发现调用了 onUnavailable() 方法,这基本上意味着没有这样的网络存在/创建。

    我想知道是否有可能通过 Wifi-Aware 创建这样的套接字连接,如果是的话,那么我的代码是否有问题,或者是否由于硬件限制,如果是,我该如何知道?

    我的最终目标是为 2 个应用创建一个视频通话应用,以便它们通过 WIFI-Aware 进行通信,我的目标是通过此网络发送和接收原始视频字节,而不使用任何预先存在的协议(如 WebRTC)。如果您发现此方法存在任何问题,也请告诉我。

返回
作者最近主题: