У меня есть клиентский код сокета TCP Python на моем Beaglebone Black, который считывает данные с датчика и отправляет их на сервер. Мой сервер находится в Windows в Visual Studio и написан на C#. Beaglebone Black и ПК с Windows подключены через SSH с помощью Putty. Проблема в том, что сервер и клиент не видят друг друга. Однако все работает, когда я использую ПК с Ubuntu (сервер, написанный на python) вместо Windows.
Не могли бы вы помочь мне установить соединение. Думаю проблема на стороне сервера.
P.S. Сервер должен быть написан на C# в связи с планами на будущее.
Вот мой код сервера C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace Server_Tutorial
{
class Program
{
static void Main(string[] args)
{
IPAddress ip = Dns.GetHostEntry("192.168.7.1").AddressList[0];
TcpListener server = new TcpListener(ip, 7000);
TcpClient client = default(TcpClient);
try
{
server.Start();
Console.WriteLine("Server started...");
Console.Read();
} catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.Read();
}
while (true)
{
client = server.AcceptTcpClient();
byte[] receivedBuffer = new byte[100];
NetworkStream stream = client.GetStream();
stream.Read(receivedBuffer, 0, receivedBuffer.Length);
StringBuilder msg = new StringBuilder();
foreach (byte b in receivedBuffer)
{
if (b.Equals(00))
{
break;
}
else
{
msg.Append(Convert.ToChar(b).ToString());
}
}
Console.WriteLine(msg.ToString() + msg.Length);
}
}
}
}
А это клиентский код на Python:
import Adafruit_BBIO.ADC as ADC
import time
import socket
import sys
serverAddr = ('192.168.7.1', 7000)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(serverAddr)
fsr = 'P9_40'
ADC.setup()
while True:
reading = ADC.read(fsr)*1000
reading = int(round(reading))
client.send(str(reading))
client.close()
А это серверный код на Python, который работает в Ubuntu:
import socket
import sys
HOST = ''
PORT = 7000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket created')
try:
s.bind((HOST, PORT))
except socket.error as msg:
print('Bind failed. ')
sys.exit()
print('Socket bind complete')
s.listen(10)
print('Socket now listening')
conn, addr = s.accept()
print('Connected to ' + addr[0] + ':' + str(addr[1]))
while True:
data = conn.recv(1024)
line = data.decode('UTF-8') # convert to string (Python 3 only)
line = line.replace("\n","") # remove newline character
print( line )
s.close()
Вы пробовали запустить:
netstat -a -b
на вашем ПК?
Если бы он показал, что ваш порт 7000 уже используется другим TCP-соединением, вы можете просто переключиться на port 8080
или другой, который вам нравится, для успешного подключения.