Что нового

[Сеть, интернет] Не конектит TCP

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Версия Autoit: 3
Здравствуйте :smile:, Возникла такая проблемма TCP с другими компьютерами совершенно не хочет конектится. Друзья конектились друг с другом, а я не могу :'(, может что-то с компьютером?
Сервер:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Сервер", 595, 422, 192, 124)
$Input1 = GUICtrlCreateInput("", 8, 392, 489, 21)
$Button1 = GUICtrlCreateButton("Отправить", 512, 392, 75, 25)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 577, 377)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
TCPStartup()
$Main = TCPListen(@IPAddress1, 8080)
If @error Then
    Exit
EndIf
Do
$Socket = TCPAccept($Main)
GUICtrlSetData($Edit1,"Нет соодинения =( подождите")
Until $Socket <> -1
GUICtrlSetData($Edit1,"ВСЕ ОК =)")

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1
TCPSend($Socket, GUICtrlRead($Input1))
EndSwitch
$bData = TCPRecv($Socket, 512, 1)
if $bData = "" Then
Sleep(0)
Else
$gData = BinaryToString ($bData,1)
GUICtrlSetData($Edit1,@CRLF&$gData,@CRLF)
EndIf
WEnd

TCPCloseSocket($Socket)
TCPShutdown()


Клиент:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Клиент", 595, 422, 192, 124)
$Input1 = GUICtrlCreateInput("", 8, 392, 489, 21)
$Button1 = GUICtrlCreateButton("Отправить", 512, 392, 75, 25)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 577, 377)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
TCPStartup()
Do
  $Socket = TCPConnect(@IPAddress1, 8080)
  GUICtrlSetData($Edit1,"Нет соодинения =( подождите")
Until $Socket <> -1
GUICtrlSetData($Edit1,"ВСЕ ОК =)")
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Button1
		TCPSend($Socket, GUICtrlRead($Input1))
	EndSwitch
$bData = TCPRecv($Socket, 512, 1)
if $bData = "" Then
Sleep(0)
Else
$gData = BinaryToString ($bData,1)
GUICtrlSetData($Edit1,@CRLF&$gData,@CRLF)
EndIf
WEnd

TCPShutdown()

Сервер и клиент я писал сам, Но уменя как на зло не работает, а у других все норм...
 

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Блин такая же проблема............ :-X

Клиент:
Код:
Local $szIPADDRESS = 'ip'
Local $nPORT = 3386

TCPStartup()


$ConnectedSocket  = TCPConnect($szIPADDRESS, $nPORT)

If @error Then
	MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
	Exit
EndIf

While 1
    $szData = InputBox("Data for Server",  @LF & @LF & "Enter data to transmit to the SERVER:")
	If @error Or $szData = "" Then ExitLoop
	TCPSend($ConnectedSocket,  $szData)
	If @error Then ExitLoop
WEnd


Сервер:
Код:
#include <GUIConstantsEx.au3>

Local $szIPADDRESS = @IPAddress1
Local $nPORT = 3386

TCPStartup()
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
If $MainSocket = -1 Then Exit

$GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()

$ConnectedSocket = -1
Do
	$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1

$szIP_Accepted = SocketToIP($ConnectedSocket)

While 1
	$msg = GUIGetMsg()
	If $msg = $GUI_EVENT_CLOSE Then ExitLoop
	
	$recv = TCPRecv($ConnectedSocket, 2048)
	If @error Then ExitLoop
	If $recv <> "" Then GUICtrlSetData($edit, _
	$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
WEnd

TCPShutdown()


Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet
    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")
    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
            "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
        $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
        If Not @error Then $aRet = $aRet[0]
    Else
        $aRet = 0
    EndIf
    $sockaddr = 0
    Return $aRet
EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Ganibal95
Клиент
Код:
$Socket = TCPConnect(@IPAddress1, 8080)

Сервер
Код:
$Main = TCPListen(@IPAddress1, 8080)

@IPAddress1 будет всегда адресом машины, на которой запущен сервер или клиент.
Как же вы хотите соединяться?

Должно быть так:
Клиент
Код:
$Socket = TCPConnect("IP Сервера", 8080)

Сервер
Код:
$Main = TCPListen(@IPAddress1, 8080)
 

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
я так и делал,писал в скрипте сервера @IPAddress1 а вклиенте ip сервера например 168.20.30.152 и всё равно не подключается выводит ошибку
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Значит так.
Есть справка Eng!

Берём пример из TCPRecv - это наш сервер

В сервере меняем строчки:
Код:
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891

на
Код:
Local $szIPADDRESS = @IPAddress1 ; Это IP машины, на которой запущен сервер. Если вы за роутером настройте Порт/Forwarding
Local $nPORT = 8080


Берём пример из TCPSend - это наш клиент

В клиенте меняем строчки:
Код:
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891

на
Код:
Local $szIPADDRESS = "Ваш IP сервера" ; Смотрим его на http://www.myip.ru, с машины, на которой будет стоять сервер
Local $nPORT = 8080


Далее всё это хозяйство компилируем, и первым запускаем сервер на машине, IP которой мы узнали на http://www.myip.ru
Клиент запускаем на другой машине.
Для чистоты эксперимента интернет каналы естественно должны быть разными, ну, например, подключитесь к WiFi роутеру соседа ;)
 

Arei

Скриптер
Сообщения
938
Репутация
115
не работает, проверял только что.
 

Arei

Скриптер
Сообщения
938
Репутация
115
при вводе, у друга ip сервера программа скрывается в трей,а потом выключается.И больше ничего.А у вас Garrett как то по иному?
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Мне кажется что сервер/клиент просто не видит, а точнее посылает покеты, а назад не получает их! Я думаю может в реестре что то надо прописать, или еще что нибудь...
Просто у одних все работает, а у других не хочет конектится/создавать!
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Arei
Вы сделали всё как я писал???
Опишите топологию вашей сети. Как вы пытаетесь соединиться?
 

Arei

Скриптер
Сообщения
938
Репутация
115
да полностью по вашему примеру.
Код:
$ConnectedSocket  = TCPConnect($szIPADDRESS, $nPORT)

типа такого.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Не работает, провайдер: 'Инфолада'
айпи динамическое! У меня есть так называемые Городские ресурсы, и внешние... При включения внешнего, городские становятся слабее(из 10мб в 1мб), внешка(100 кб/с)... Может проблема в провайдере?
 

Arei

Скриптер
Сообщения
938
Репутация
115
странные вещи, скажите пожалуйста у кого стабильно работает Tcp какие у вас настройки интернета, и стоят у вас какие нибудь "хамачи" (т.е сторонние программы где используются локальные соединения).Заранее благодарю.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Многие провайдеры закрывают такие порты, как 8080, 2121, и т.д. Проверьте на другом порте. Если стоит роутер, то, само собой, нужно открыть соответствующие порты на нем. Да и вообще, вы номер порта выбераете от балды? А еще попробуйте увеличить значение

Код:
Opt("TCPTimeout", 500)
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
На пару часов поднял серверную часть дома. Подключаюсь с работы.
Коннект есть... все работает.
Выключил.

Настройки такие TCP/IP от DHCP. Далее соединение с провайдером по PPTP(BeeLine). (оплачена услуга статический IP 83.69.106.185) Все порты у провайдера открыты.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Клиент", 595, 422, 192, 124)
$Input1 = GUICtrlCreateInput("", 8, 392, 489, 21)
$Button1 = GUICtrlCreateButton("Отправить", 512, 392, 75, 25)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 577, 377)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
TCPStartup()
Do
  $Socket = TCPConnect("83.69.106.185", 8080)
  GUICtrlSetData($Edit1,"Нет соодинения =( подождите")
Until $Socket <> -1
GUICtrlSetData($Edit1,"ВСЕ ОК =)")
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $Button1
        TCPSend($Socket, GUICtrlRead($Input1))
    EndSwitch
$bData = TCPRecv($Socket, 512, 1)
if $bData = "" Then
Sleep(0)
Else
$gData = BinaryToString ($bData,1)
GUICtrlSetData($Edit1,@CRLF&$gData,@CRLF)
EndIf
WEnd

TCPShutdown()
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Yashied
Не работает... Возможно дело не в провайдере....
Надеюсь на дальнейшию помощь....
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
zlo-kazan
Можите сервер подержать? Я попробую сконектится....


Добавлено:
Сообщение автоматически объединено:

zlo-kazan

Раз сконектится получилось, почему я немогу создать сервер чтоб к нему подключались? или ты что-то дополнительно припесал?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Кроме того, что вместо @IPAddress1 поставил "83.69.106.185" ничего. ;D

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Сервер", 595, 422, 192, 124)
$Input1 = GUICtrlCreateInput("", 8, 392, 489, 21)
$Button1 = GUICtrlCreateButton("Отправить", 512, 392, 75, 25)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 577, 377)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
TCPStartup()
$Main = TCPListen("83.69.106.185", 8080)
If @error Then
    Exit
EndIf
Do
$Socket = TCPAccept($Main)
GUICtrlSetData($Edit1,"Нет соодинения =( подождите")
Until $Socket <> -1
GUICtrlSetData($Edit1,"ВСЕ ОК =)")

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1
TCPSend($Socket, GUICtrlRead($Input1))
EndSwitch
$bData = TCPRecv($Socket, 512, 1)
if $bData = "" Then
Sleep(0)
Else
$gData = BinaryToString ($bData,1)
GUICtrlSetData($Edit1,@CRLF&$gData,@CRLF)
EndIf
WEnd

TCPCloseSocket($Socket)
TCPShutdown()
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
zlo-kazan
Через 1 мин сконектитесь со мной мой АЙпи: 176.163.26.107 порт:8080


Добавлено:
Сообщение автоматически объединено:

zlo-kazan
Пробуйте конектится.....
 
Верх