Ich versuche sms über ein c# Programm zu verschicken.
Der Anbieter aspsms[1] bietet einen Dienst an über den man
sms verschicken kann, und zwar über sockets.
Ich habe ein Python Beispiel, und möchte das selbe jetzt mit c#
machen.
//Python Beispiel
//CONTENT ist die xml-Nachricht als string die die Informationen
//enthält(Absender,Empfänger,Nachricht...)
//Komplettes beispiel unter [2]
length=len(CONTENT)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send("POST /xmlsvr.asp HTTP/1.0\r\n")
s.send("Content-Type: text/xml\r\n")
s.send("Content-Length: "+str(length)+"\r\n\r\n")
s.send(CONTENT)
datarecv=s.recv(1024)
So wie ich das hier verstehe wird hier die Nachricht gesendet, und in
der letzten Zeile
eine Antwort empfangen.
Leider kann ich das selbe nicht mit c# nachvollziehen, und ich weis
noch nicht was ich falsch
mache.
//c# Beispiel das nicht funktioniert.
//stm.Write wird noch ohne Fehler ausgeführt, macht aber nichts(d.h.
es wird nichts versendet)
//Bei stm.Read(carry,0,100) bleibt das Programm dan hängen.
TcpClient MyClient = new TcpClient();
MyClient.Connect("xml1.aspsms.com",5061);
Stream stm = MyClient.GetStream();
try
{
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] barray = ascii.GetBytes(msg);
stm.Write(barray,0,barray.Length);
byte[] carry = new byte[100];
int k = stm.Read(carry,0,100);
string str = ascii.GetString(carry);
Console.WriteLine("return\n" + str);
}
catch(Exception e)
{
Console.WriteLine("error" + e.ToString());
}
Hat mir jemand einen Tipp wie ich das Python Programm in c# umsetzte?
gruss und danke
manuel
[1] http://www.aspsms.com
[2] https://www.aspsms.com/examples/python/
kaderli manuel wrote:
> Ich versuche sms über ein c# Programm zu verschicken.
> Der Anbieter aspsms[1] bietet einen Dienst an über den man
> sms verschicken kann, und zwar über sockets.
> Ich habe ein Python Beispiel, und möchte das selbe jetzt mit c#
> machen.
>
> //Python Beispiel
> //CONTENT ist die xml-Nachricht als string die die Informationen
> //enthält(Absender,Empfänger,Nachricht...)
> //Komplettes beispiel unter [2]
> length=len(CONTENT)
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s.connect((HOST, PORT))
> s.send("POST /xmlsvr.asp HTTP/1.0\r\n")
> s.send("Content-Type: text/xml\r\n")
> s.send("Content-Length: "+str(length)+"\r\n\r\n")
> s.send(CONTENT)
> datarecv=s.recv(1024)
>
>
Also mit .NET wuerde ich das nicht direkt ueber Sockets machen, da gibt
es komfortablere Klassen wie System.Net.HttpWebRequest/Response zum
Senden und Empfangen via HTTP, und fuer das Erstellen von XML gibt es
z.b. den XmlTextWriter. Ein verkuerztes Beispiel sieht dann so aus:
using System;
using System.Xml;
using System.Net;
using System.IO;
public class Test20040322 {
public static int port = 80; // 5061
public static string host = "localhost"; // "xml1.aspsms.com"
public static string url = "/javascript/test20040322.asp"; //
"xmlsvr.asp"
public static void Main (string[] args) {
string message =
"Das Versenden der SMS kostet 0,49€. Umlaute: äöü.<>";
HttpWebRequest httpRequest = (HttpWebRequest)
WebRequest.Create("http://" + host + ":" + port + url);
httpRequest.Method = "POST";
httpRequest.ContentType = "text/xml";
Stream requestStream = httpRequest.GetRequestStream();
XmlTextWriter xmlTextWriter = new XmlTextWriter(requestStream,
System.Text.Encoding.UTF8);
xmlTextWriter.WriteStartDocument();
xmlTextWriter.WriteStartElement("aspsms");
// write other elements here
xmlTextWriter.WriteStartElement("MessageData");
xmlTextWriter.WriteString(message);
xmlTextWriter.WriteEndElement();
xmlTextWriter.WriteEndElement();
xmlTextWriter.Close();
HttpWebResponse httpResponse = (HttpWebResponse)
httpRequest.GetResponse();
Console.WriteLine("Response is:");
StreamReader streamReader = new
StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.UTF8);
Console.WriteLine(streamReader.ReadToEnd());
streamReader.Close();
httpResponse.Close();
}
}
Du musst halt nur die in den Kommentaren angegebenen port/host/url
verwenden und dann halt das vollstaendige XML konstruieren, da ich
ohnehin keine Werte fuer userkey/password usw. habe, habe ich keine
vollstaendige XML Nachricht aufgebaut.
--
Martin Honnen
http://JavaScript.FAQTs.com/
>Du musst halt nur die in den Kommentaren angegebenen port/host/url
>verwenden und dann halt das vollstaendige XML konstruieren, da ich
>ohnehin keine Werte fuer userkey/password usw. habe, habe ich keine
>vollstaendige XML Nachricht aufgebaut.
Vielen Dank für dein ausführliches Beispiel. So funktioniert das
ganze.
gruss
manuel