Skicka XML till server

Diskussion i 'Frågor, support och diskussion' startad av Niklas, 23 mar 2010.

  1. Niklas

    Niklas Youth Droid Medlem

    Blev medlem:
    1 jun 2009
    Inlägg:
    110
    Mottagna gillanden:
    24
    Operatör:
    Telia företag
    Telefon:
    Pixel 6 Pro

    MINA ENHETER

    Operatör:
    Telia företag
    Telefon:
    Pixel 6 Pro
    Platta:
    iPad Air
    Hej,

    Jag skulle behöva lite hjälp på hur man gör när man skall skicka XML till en server (servern i detta fall är inte en webbserver så jag kan inte skicka till en webbsida).

    Jag skall skicka en XML-sträng till servern som i sin tur kommer skicka tillbaka en XML-sträng som svar på min.

    Någon som har en länk eller liknade på hur man kan göra? Alla tips tas emot med tacksamhet.

    //Niklas
     
  2. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    Vad är det för server?

    Kan du skriva serverdelen själv så kan du kanske till och med låta den acceptera en ren ström av xml.
     
  3. Niklas

    Niklas Youth Droid Medlem

    Blev medlem:
    1 jun 2009
    Inlägg:
    110
    Mottagna gillanden:
    24
    Operatör:
    Telia företag
    Telefon:
    Pixel 6 Pro

    MINA ENHETER

    Operatör:
    Telia företag
    Telefon:
    Pixel 6 Pro
    Platta:
    iPad Air
    Just nu är det bara en C# server som ligger och lyssnar på inkommnade anrop. Men tanken är sedan att det skall vara en basstation för IP-Dect telefoner.

    Skickar med koden för C#-servern.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;

    namespace ChatServerForm
    {
    /// <summary>
    /// sidan 1237-f
    /// </summary>
    public partial class frmServer : Form
    {
    private Socket connection;
    private Thread readThread;
    private NetworkStream socketStream;
    private BinaryReader reader;
    private BinaryWriter writer;

    private delegate void DisplayDelegate(string message);

    public frmServer()
    {
    InitializeComponent();
    }

    private void frmServer_Load(object sender, EventArgs e)
    {
    readThread = new Thread(new ThreadStart(RunServer));
    readThread.Start();
    }



    public void RunServer()
    {
    TcpListener listener;
    int counter = 1;

    try
    {
    IPAddress local = IPAddress.Parse("127.0.0.1");
    listener = new TcpListener(local, 50000);

    listener.Start();

    while (true)
    {
    DisplayMessage("Waiting for connections...\r\n");
    connection = listener.AcceptSocket();
    socketStream = new NetworkStream(connection);
    writer = new BinaryWriter(socketStream);
    reader = new BinaryReader(socketStream);

    DisplayMessage("Connection " + counter + " recieved\r\n");
    string theReply = "";
    do
    {
    try
    {
    theReply = reader.ReadString();
    DisplayMessage("\r\n" + theReply);
    }
    catch (Exception)
    {
    break;
    }
    } while (theReply != "CLIENT>>> TERMINATE" && connection.Connected);
    DisplayMessage("\r\nUser terminated connection\r\n");

    writer.Close();
    reader.Close();
    socketStream.Close();
    connection.Close();
    }
    }
    catch (Exception) { }



    }

    private void frmServer_FormClosing(object sender, FormClosingEventArgs e)
    {
    System.Environment.Exit(System.Environment.ExitCode);
    }

    private void DisplayMessage(string message)
    {
    if (txtServerMessage.InvokeRequired)
    {
    Invoke(new DisplayDelegate(DisplayMessage), new object[]{
    message});
    }
    else
    {
    txtServerMessage.Text += message;
    }
    }

    private void txtServerInput_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Enter)
    {
    try
    {

    writer.Write("CLIENT >>> " + txtServerInput.Text);
    txtServerMessage.Text = "\r\nCLIENT >>> " + txtServerInput.Text;

    if (txtServerInput.Text == "TERMINATE")
    connection.Close();

    txtServerInput.Clear();
    }
    catch (SocketException)
    {
    txtServerMessage.Text += "\nError writing object";

    }
    }
    }



    }
    }
     
  4. Perty

    Perty Youth Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    120
    Mottagna gillanden:
    2

    MINA ENHETER

  5. doep

    doep Kid Droid Medlem

    Blev medlem:
    14 aug 2009
    Inlägg:
    98
    Mottagna gillanden:
    0

    MINA ENHETER

    Det finns säkert några väldigt enkla sätt att göra detta på, men när jag skrev musikCube så gjorde jag en egen wrapper för att hantera detta på mitt egna sätt.
    I princip går mina klasser ut på att man skapar en Socket mot servern (se rad 235 här), sen skapar man en doep.xml.Reader och en Writer som fungerar som kontinuerliga parsers/senders.
    Kod:
    java.net.Socket newSocket       = new java.net.Socket("minserver",50000);
    doep.xml.Reader reader  = new doep.xml.Reader(this.socket.getInputStream());
    
    // Vänta på specifik tag "tjohej"
    doep.xml.ReaderNode tjohejNode=null;
    if( (tjohejNode=reader.ChildNode("tjohej")) != null ){
       // Loopa igenom alla noder som ligger i tjohej-noden
       doep.xml.ReaderNode anyNode=null;
       while( (anyNode=tjohejNode.ChildNode()) != null ){
          // Kolla node-namn med anyNode.name och attribut med anyNode.attributes
       }
    }
    
    doep.xml.Writer fungerar på liknande sätt.

    Med som sagt så finns det antagligen enklare sätt, men koden är fri att användas om du vill (BSD style licens)