Hej, Yes, jag har provat. Saken är den att jag inte alls kan asp.net. Jag har förstått att det är i princip omöjlig, eller åtminstone väldigt tidskrävande, att utföra denna typ av kommunikation i klassisk ASP. Därför har jag nu börjat rota runt bland asp.net scripts där det verkar vara piece-of-cake. Så här ska du skriva om du INTE använder code-behind. Micke! Nu slipper jag felmeddelanden och koden verkar köras korrekt. Dock får jag inget svar ifrån servern jag anropar. De kan heller inte se på sin sida att jag överhuvudtaget loggat in.. Om du har möjligheten, testa koden som en Win forms. (jag tror det kommer funka klockrent då). Anders. Hej igen Micke, Johan, Anders, ok... Nej, tror inte jag kan använda koden. Det är inte med FTP-protokollet jag ska överföra datan utan via vanlig ASCII över TCP/IP socket. Tack ändå för koden! Har du nån vettig miljö så att du kan steppa dig igenom och se vad som händer? Jag tycker att koden ser rätt ut. Är du säker på att den verkligen skickar? Exceptions? Hej Johan, skulle ju vara Dim data As [Byte]() se ovan Jag vet inte om du läst längre upp i tråden, Johan, men jag kan absolut ingenting om asp.net utan är tvungen att använda det eftersom denna funktion inte verkar gå att skapa i asp. Detta tar någon minut att fixa i php. Php är gratis och kan laddas ner från http://www.php.net/ Hej Thomas! Hej igen Thomas, Sockets i VB kod. Det går säkert att göra direwt ifrån ASP, problemet (om det finns) skulle väl vara att skapa en instans av Winsock komponenten. när du säger att du inte får något resultat , menar du att du inte ser något på din asp sida då?Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via TCP/IP
Jag behöver hämta data ifrån tredje part till en applikation jag bygger. Denna data ska hämtas via TCP/IP på en viss port genom att skicka en textsträng och få en likadan tillbaka. Kan denna kod, som jag hittat på nätet, fungera?
-----
Imports System.Net.Sockets
Imports System.Text
Class TCPCli
Shared Sub Main()
Dim tcpClient As New System.Net.Sockets.TcpClient()
tcpClient.Connect("127.0.0.1", 8000)
Dim networkStream As NetworkStream = tcpClient.GetStream()
If networkStream.CanWrite And networkStream.CanRead Then
' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.
Dim returndata As String = Encoding.ASCII.GetString(bytes)
Console.WriteLine(("Host returned: " + returndata))
Else
If Not networkStream.CanRead Then
Console.WriteLine("cannot not write data to this stream")
tcpClient.Close()
Else
If Not networkStream.CanWrite Then
Console.WriteLine("cannot read data from this stream")
tcpClient.Close()
End If
End If
End If
' pause so user can view the console output
Console.ReadLine()
End Sub
End ClassSv: Fungerar denna kod för kommunikation via TCP/IP
Jag får ett syntax error direkt på rad "Imports System.Net.Sockets". Jag har helt enkelt bara lagt koden ovan i en .aspx-fil och inlett filen med
<% @ Page Language = "VB" %>
Jag har sedan koden ovan inom <%%>-taggar.
Kanske är det strukturen på själva aspx-filen som är fel?
Tacksam för all hjälp då jag är under enorm tidspress.
AndersSv: Fungerar denna kod för kommunikation via TCP/IP
<%@ Page Language = "VB" %>
<%@ Import Namespace="System.Net.Sockets" %>
<%@ Import Namespace="System.Text" %>
<script runat="server">
Class TCPCli
Shared Sub Main()
Dim tcpClient As New System.Net.Sockets.TcpClient()
tcpClient.Connect("127.0.0.1", 8000)
Dim networkStream As NetworkStream = tcpClient.GetStream()
If networkStream.CanWrite And networkStream.CanRead Then
' Do a simple write.
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there")
networkStream.Write(sendBytes, 0, sendBytes.Length)
' Read the NetworkStream into a byte buffer.
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.
Dim returndata As String = Encoding.ASCII.GetString(bytes)
Console.WriteLine(("Host returned: " + returndata))
Else
If Not networkStream.CanRead Then
Console.WriteLine("cannot not write data to this stream")
tcpClient.Close()
Else
If Not networkStream.CanWrite Then
Console.WriteLine("cannot read data from this stream")
tcpClient.Close()
End If
End If
End If
' pause so user can view the console output
Console.ReadLine()
End Sub
End Class
</script>
/r
Det här ser väl ut som win forms?
Sv: Fungerar denna kod för kommunikation via TCP/IP
Jag har angett rätt IP-nummer och port enligt nedan:
tcpClient.Connect("217.151.XXX.XXX", XXXX)
Jag skickar min textsträng enligt nedan, kommandona ska separeras med TAB och LF tecken så detta måste väl vara rätt:
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("QUERY" & VbTab & "LOGIN" & vBTab & "PASS" & VblF & "TELENUMMER" & VbTab & "081234567" & Vblf & "ENDQUERY" & VbLf)
Nu borde jag få tillbaka ett svar med namn och adress på telefonnumret som är angivet, men det händer ingenting. Visst är det väl meningen att raden nedan ska skriva ut det svar servern gett:
Dim returndata As String = Encoding.ASCII.GetString(bytes)
Console.WriteLine(("Host returned: " + returndata))
Men som sagt, inget resultat.
Eftersom jag är i akut behov av hjälp med detta så säger jag att det är värt 1000 kronor för mig att få scriptet att fungera. Det borde inte handla om mer än någon timmes jobb för någon som vet vad han/hon pysslar med?
Svara i denna tråd ASAP om intresse finns.
Vänligen
AndersSv: Fungerar denna kod för kommunikation via TCP/IP
/mSv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via TCP/I
På vilket sätt skall du hämta datan? hur presenteras den? vart finns den?
Måste du gå med Socket? skall du in på en FTP, en Websida o göra svcreenscrape?
Gå mot någon annan tjänst via annan port med annat protokoll än FTP, HTTP, etc?
Mvh JohanSv: Fungerar denna kod för kommunikation via TCP/IP
Som jag skrev ovan kan jag ingenting om asp.net utan är tvungen att använda det eftersom det jag vill göra inte verkar funka med vanlig ASP. I alla fall inte utan en massa utvecklingsarbete.
Således, jag har inte en aning om vad Win forms är :-) Hjälp mig gärna
AndersSv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via TCP/
Utdrag ifrån det API jag fått ifrån leverantören:
Klienten ansluter sig mot Teleadress server med socket mot TCP/IP adress och port, ställer
sin fråga och får sitt svar. Flera frågor och svar kan hanteras sekventiellt vid en och samma
uppkoppling.
Varje fråga kan innehålla en eller flera frågeparametrar, se protokollbeskrivning 4.1 Fråga.
Svaren innehåller mer eller mindre information beroende på vilka frågeparametrar som
använts, se protokollbeskrivning 4.2 Svar.
Överföring av kommandon, parametrar och information sker i klartext ANSI ASCII med data
uppdelat med TAB och LF tecken.
Vänligen
AndersSv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via TCP
Kan du bara VB .Net eller även läsa C# kod?
jag har byggt ett litet ftp app, eller ja bygde inte klart den, ville bara testa o skicka o ta emot kommandon. Kanske du kan nyttja den?
Vad den gör är att jag skickar data via Command och får ett returvärde som jag hanterar.
<code>
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Nsquared2.Net.FTP
{
/// <summary>
/// Summary description for FTPClient.
/// </summary>
public class FTPClient
{
protected Socket clientSocket;
protected string hostName;
protected int port;
protected string receivedData = null;
protected int StatusValue = 220;
protected static int BUFFER_SIZE = 512;
protected byte[] buffer = new Byte[BUFFER_SIZE];
public string HostName
{
get{return(hostName);}
set{hostName = value;}
}
public int Port
{
get{return(port);}
set{port = value;}
}
public FTPClient()
{}
public string Login(string userName,string password)
{
clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(GetIPAddress(),port));
ReadNetworkStream();
if(StatusValue != 220)
throw new Exception(receivedData);
SendCommand("USER "+ userName);
if(StatusValue != 331)
throw new Exception(receivedData);
SendCommand("PASS "+ password);
if(StatusValue != 230)
throw new Exception(receivedData);
SendCommand("STORE YOU_HAVE_BEEN_HACKED!!!");
return(receivedData);
}
private void ReadNetworkStream()
{
int ReceivedValue = clientSocket.Receive(buffer,0,buffer.Length,0);
receivedData = Encoding.ASCII.GetString(buffer,0,ReceivedValue);
StatusValue = Int32.Parse(receivedData.Substring(0,3));
}
private IPAddress GetIPAddress()
{
long IPAddressValue = System.Net.Dns.GetHostByName(hostName).AddressList[0].Address;
return(new IPAddress(IPAddressValue));
}
private void SendCommand(string command)
{
Byte[] commandByte = Encoding.ASCII.GetBytes(command+"\r\n");
clientSocket.Send(commandByte,commandByte.Length,0);
ReadNetworkStream();
}
}
}
</code>
Mvh JohanSv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via TC
Sv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via T
Vet inte om det gör nån direkt skillnad men:
Dim data As [Byte]()= New [Byte](tcpClient.ReceiveBufferSize) {}
dim bytes as Int32=networkStream.Read(data, 0, data.Length)
' Output the data received from the host to the console.
Dim returndata As String = Encoding.ASCII.GetString(data, 0, bytes)
Edit: ändrade min buggiga kod...
Sv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via
Nej jag har tyvärr ingen möjlighet att steppa igenom koden. Om jag lägger till/ändrar din kod enligt ovan får jag fel:
Value of type '1-dimensional array of Byte' cannot be converted to 'Byte'
på rad
Line 17: Dim data As Byte= New [Byte](tcpClient.ReceiveBufferSize) {}
AndersSv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via
Sen om du inte har någon miljö och kör via asp.net så kan du inte förvänta dig att Console.WriteLine gör nånting. Testa istället att lägga upp en textbox och fyll den alt gör ett konsollprogram.Sv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation vi
Alltså är allt detta prat om miljö, textboxes, konsollprogram med mera rena grekiskan för mig. :)
Jag behöver:
Ifrån en asp-sida skicka en variabel innehållande ett telefonnummer till ett script
Detta script ska via TCP/IP socket logga in på en extern server och posta en textsträng innehållande logininformation plus detta telefonnummer.
Detta script ska sedan ta emot svaret ifrån servern (innehållande namn, adress mm) och skicka detta tillbaka som en variabel till en vanlig asp-sida.
Detta måste alltså ske "per automatik". Det finns ingen möjlighet för mig att mata in värden manuellt i en dialogruta eller liknande.
Med hjälp av vilket språk eller vilken teknik detta uppnås är för mig ointressant. Jag måste bara få det att fungera och jag erbjuder 1000 kr till den som ordnar det. Det borde väl inte innebära mer än någon timmes jobb?
Vänligen
AndersSv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation v
Kod:
<?php
$fp = fsockopen("127.0.0.1", 8000);
fwrite($fp, "Det du ska skicka till servern.");
$data = fread($fp, 1024);
// Svaret från servern finns nu i $data.
print $data;
?>Sv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation
Verkar ju underbart om detta ska kunna funka. Det verkar dock inte göra det rakt av..
Jag får en Timeout och scriptet avbryts när jag testar att köra scriptet mot rätt server och med rätt sträng att sända.
Den sträng jag vill sända är uppdelad med <TAB> och <LF> tecken. Jag är inte säker på hur dessa skapas i php, är det likadant som i ASP? Det vill säga:
fwrite($fp, "QUERY" & VbTab & "USER" & vBTab & "PASS" & VblF & "TELENUMMER" & VbTab & "081234567" & Vblf & "ENDQUERY" & VbLf);
Det är också viktigt att texten skickas som ren ASCII men det gör den väl?
Hör jättegärna av dig igen, Thomas! Antingen här eller direkt till anders@cellnyinfo.seSv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation
Tog reda på att tab och lf skriv \t och \n så nu funkar ditt script perfekt!
Hör av dig till mig så att du kan få din belöning, anders@cellnyinfo.se
AndersSv:Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation
Från VB6, skapa en ActiveX dll, lägg en referens till WINDOWS\system32\mswinsck.ocx
Dim Socket As MSWinsockLib.Winsock
dim data as String
dim retData as String
Set Socket = New MSWinsockLib.Winsock
data = "test"
Socket.Close
Set Socket = Nothing
Socket.Protocol = sckTCPProtocol
Socket.RemoteHost = IP
Socket.RemotePort = PORT
Socket.Connect
If Socket.State = sckConnected Then
' Skicka
Socket.SendData data
'Ta emot 10 bytes i retData
Socket.GetData retData, , 10
End IF
Du får modifiera koden för att skicka rätt data och ta hand om svaret.
Kompilera sen och anropa ifrån din asp-sida.Sv: Lös tråden och tjäna 1000 kr: Fungerar denna kod för kommunikation via TCP/I
isåfall , testa att byt "console.writeline" mot "response.write" ;)
//Roger