1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

sockets em C#

Discussão em 'Programação' iniciada por leinad, 23 de Dezembro de 2006. (Respostas: 7; Visualizações: 4645)

  1. leinad

    leinad Power Member

    sou iniciante em C# e tenho k fazer um trabalho de sockets, que consistem num servidor e num cliente (inicialmente).

    O trabalho consiste em o servidor saber o estado de alerta (alerta amarelo, alerta vermelo, da proteção civil) do cliente, o cliente envia a saturação do solo e a pluviosidade em 2 pacotes separados
    e apresenta-os numa txt do servidor, tenho que pegar nesses valoes e através de uma forma consiguir saber o estado de alerta...



    o que esta a apresentrar na txt neste momento é: 1020
    o 10 refere-se á saturação do solo e 20 refere-se á pluviosidade. Qual é a propriedade da txt ou como faço para ficar o 10 numa linha e 20 na linha a seguir? a txt está definida como multiline.
     
  2. HecKel

    HecKel The WORM

    Boas!

    De C# não percebo nada..., no entanto ando agora com um trabalho na faculdade em que preciso de C# e encontrei este artigo, pode ser que te dê jeito na elaboração do teu trabalho.

    abraços, HecKel
     
  3. ZedMad

    ZedMad Power Member

    yo,

    C# é BOM!!
     
    Última edição: 22 de Agosto de 2007
  4. SoundSurfer

    SoundSurfer Power Member

    Código:
    txt.Text = "10\r\n20";
     
  5. leinad

    leinad Power Member

    alguém pode dizer o que está mal neste código de c#?


    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;


    public class Servidor
    {
    public static void Main()
    {
    //int recv;
    int iPLuC;
    int iSatC;
    double fAlerta;
    byte[] data = new byte[1024];
    byte[] data2 = new byte[1024];
    IPEndPoint ipep = new IPEndPoint(IPAddress.Any,8221);

    Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


    newsock.Bind(ipep);
    newsock.Listen(10);
    Console.WriteLine("Aguardando ligacao de um cliente...");
    Socket client = newsock.Accept();
    IPEndPoint clientep =(IPEndPoint)client.RemoteEndPoint;
    Console.WriteLine("Conecado com {0} e porto {1}", clientep.Address, clientep.Port);


    string welcome = "Ligacao estabelecida com sucesso!";
    data = Encoding.ASCII.GetBytes(welcome);
    client.Send(data, data.Length, SocketFlags.None);

    while (true)
    {
    data = new byte[1024];
    iPLuC = newsock.Read(data, 0, data.Length);

    Console.WriteLine("Pluviosidade actual:[{0}].", Encoding.ASCII.GetString(data, 0, iPLuC));
    newsock.Write(data, 0, iPLuC);


    data2 = new byte[1024];
    iSatC = newsock.Read(data2, 0, data2.Length);

    Console.WriteLine("Saturação actual:[{0}].", Encoding.ASCII.GetString(data2, 0, iSatC));
    newsock.Write(data2, 0, iSatC);



    fAlerta=((iPLuC*iSatC*1.5)+(0)); //msg de do estado de alerta

    if (fAlerta <=10) Console.WriteLine("Esta cidade encontra-se em alerta VERDE");

    if (fAlerta>10 | fAlerta<=30) Console.WriteLine("Esta cidade encontra-se em alerta AMARELO");

    if (fAlerta>30 | fAlerta<=60) Console.WriteLine("Esta cidade encontra-se em alerta LARANJA");

    if (fAlerta > 60) Console.WriteLine("Esta cidade encontra-se em alerta VERMELHO");


    // if (recv == 0)
    // break;

    //Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); //envia para o cliente
    /*client.Send("Sucesso!", SocketFlags.None); envia para o cliente */
    client.Send(Encoding.ASCII.GetBytes("Sucesso!"));
    }
    Console.WriteLine("Disconectado from {0}", clientep.Address);

    client.Close();
    newsock.Close();
    }
    }




    tão a dar as seguintes mensagens de erro...

    'System.Net.Sockets.Socket' does not contain a definition for "write" e

    'System.Net.Sockets.Socket' does not contain a definition for "read"
     
  6. iznougud

    iznougud I quit My Job for Folding

    Tenta com Receive e Send, o read e write é de tcpclient e nao socket
     
  7. leinad

    leinad Power Member

    experimentei... e tambem dá erro... por overload...


    ñ será alguma de biblioteca em falta?

    aceito dicas... sou iniciante em c#...
     
  8. inginheiiro

    inginheiiro Power Member

    sockets...

    servidor..

    Código:
     try {
    			IPAddress ipAd = IPAddress.Parse("192.168.0.2"); 
    			TcpListener myList=new TcpListener(ipAd,8001);
    
    			myList.Start();
    
    			Console.WriteLine("A correr na porta  8001...");				
    			Console.WriteLine("há espera.....");
    
    			Socket s=myList.AcceptSocket();
    			Console.WriteLine("Conexão aceite de "+s.RemoteEndPoint);
    
    			byte[] b=new byte[100];
    			int k=s.Receive(b);
    			Console.WriteLine("Recebido...");
    			for (int i=0;i<k;i++)
    				Console.Write(Convert.ToChar(b[i]));
    
    			ASCIIEncoding asen=new ASCIIEncoding();
    			s.Send(asen.GetBytes("A string foi recebida pelo servidor."));
    			Console.WriteLine("\\nAck enviado ...");
    
    			s.Close();
    			myList.Stop();
    
    		}
    		catch (Exception e) {
    			Console.WriteLine("Erro..... " + e.StackTrace);
    		}

    cliente

    Código:
    try {
    			TcpClient tcpclnt = new TcpClient();
    			Console.WriteLine("A conectar.....");
    			
    			tcpclnt.Connect("192.168.0.2",8001); 
    			
    			Console.WriteLine("Conectado");
    			Console.Write("digite a string a transmitir : ");
    			
    			String str=Console.ReadLine();
    			Stream stm = tcpclnt.GetStream();
    						
    			ASCIIEncoding asen= new ASCIIEncoding();
    			byte[] ba=asen.GetBytes(str);
    			Console.WriteLine("A Transmitir.....");
    			
    			stm.Write(ba,0,ba.Length);
    			
    			byte[] bb=new byte[100];
    			int k=stm.Read(bb,0,100);
    			
    			for (int i=0;i<k;i++)
    				Console.Write(Convert.ToChar(bb[i]));
    			
    			tcpclnt.Close();
    		}
    		
    		catch (Exception e) {
    			Console.WriteLine("Erro..... " + e.StackTrace);
    		}

    /ing
     
    Última edição: 27 de Dezembro de 2006

Partilhar esta Página