WiFi Shield - Client Shield unable to connect

My setup is an Arduino Mega and a Raspberry Pi. connected via WiFi, I want to send some strings to and fro each other, so I used socket programming. I have a python script which is listening to the same port and awaiting to accept any connection but my Arduino just cannot connect and after 4 tries or so, it prints ‘No Socket Available’. Anybody has any solutions to this? My WiFi Shield firmware is 1.1.0.

I’ve done a few troubleshoot testing but still to no avail. With the python script running on my Rpi, I connect my laptop to the same network, and entered 192.168.70.1:5143 and the script was able to detect the connection successfully, thus I do not think there is a problem on my Rpi side.

There is no error, but it just keeps returning False from client.connect which I don’t understand why. Please helpppppp

Urgently need help on this. Thanks in advance!

Arduino Code

#include <SPI.h>
#include <SD.h>
#include <WiFi.h>
#include <WiFiUdp.h>

#define SD_CS 4

// For WiFi Shield
int status = WL_IDLE_STATUS;
char ssid[] = "lightstick"; //  your network SSID (name)
char pass[] = "lightstick";    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)
unsigned int localPort = 5143;      // local port to listen on
char packetBuffer[1750]; //buffer to hold incoming packet
char temp[7];
char  ReplyBuffer[] = "ac";       // a string to send back
IPAddress my_ip(192, 168, 70, 7);
IPAddress remote_ip(192, 168, 70, 1);
WiFiUDP Udp;
WiFiClient client;
String recvData = "";

void setup(void) {
  Serial.begin(9600);
  
  // ------------------------ WiFi Shield ---------------------------------
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    // while (true);
  } else {
    Serial.println("WiFi shield Detected!");
  }

  String fv = WiFi.firmwareVersion();  
  
  //WiFi.config(my_ip);
  
  // attempt to connect to Wifi network:
  if (status != WL_CONNECTED) {
    Serial.print(F("Attempting to connect to SSID: "));
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
    while (status != WL_CONNECTED) {
      Serial.println("Attempting to connect again...");
      status = WiFi.begin(ssid, pass);
      delay(3000);
    }
    Serial.println(F("WiFi establish connection ended!"));
  }
  fv = WiFi.firmwareVersion();
  Serial.println(fv);
  if ( fv != "1.1.0" )
    Serial.println("Please upgrade the firmware");
  
  boolean rpiConnected = false;
  if (status == WL_CONNECTED) {
    Serial.println(F("Connected to wifi\n"));
    rpiConnected = false;

    printWifiStatus();
    // Connection to rPi
    while (rpiConnected == false) {
      Serial.println(F("Connecting to rPi..."));
      Serial.println(remote_ip);
      Serial.println(localPort);
      rpiConnected = client.connect(remote_ip, 5143);
      Serial.println(rpiConnected);
      Serial.println(F("\tWaiting for delay"));
      //client.flush();
      //client.stop();
      delay(3000);
      
    };
    Serial.println("Connected to Raspberry Pi");
    sendData("Arduino Connected");

    printWifiStatus();
  } else {
    Serial.println(F("Wifi connection FAILED!"));
  }

Python Script

import thread
import time
import socket

from collections import deque

RPI_HOST = '192.168.70.1'
PORT_FOR_ARDUINO = 5143

def ipComm():
    print "Waiting for Arduino"

    print "Starting socket connection."
    ip = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    print "Started! Setting socket option, reuse address"
    ip.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # ip.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    hostname = socket.gethostname()
    print hostname
    hostip = socket.gethostbyname_ex(hostname)
    print hostip
    print "Set! Starting socket binding"
    ip.bind((RPI_HOST, PORT_FOR_ARDUINO))
    print RPI_HOST
    print PORT_FOR_ARDUINO
    print "Binded! Starting socket listening"
    ip.listen(5)
    print "Listening...."

    data, pcaddr = ip.accept()
    print "Connected to Arduino", pcaddr
    return data, pcaddr