Uruchomienie programu.

0

Witam,
Nie jestem w zielony w jako takim programowaniu. Większość języków pokrywa się swoimi komendami, ale są to prawdę mówiąc banały. Mój problem na pozór jest także banalny - uruchomienie programu (C#). W nim nie ma banalnych IF, While, COUT, NEXT, FOR.....Zaczyna się prawdziwe programowanie.
Jak to zmusić do zadziałania? Proszę o pomoc, bo się załamię [glowa]
Czy uruchomić to w konsoli? nie wiem, kompletnie nie mam pojęcia :(

//odczytanie parametrów podłączenia do socketa z rejestru
RegistryKey regKey = Registry.CurrentUser.CreateSubKey("Software\\COMARCH S.A.\\NOL3\\7\\Settings");
int nca_pasync = 0;
int.TryParse(regKey.GetValue("nca_pasync", "0").ToString(), out nca_pasync);
int nca_psync = 0;
int.TryParse(regKey.GetValue("nca_psync", "0").ToString(), out nca_psync);
int ncaset_pasync = 0;
int.TryParse(regKey.GetValue("ncaset_pasync", "0").ToString(), out ncaset_pasync);
int ncaset_psync = 0;
int.TryParse(regKey.GetValue("ncaset_psync", "0").ToString(), out ncaset_psync);

//otwarcie socketa synchronicznego
IPEndPoint ipEndSync = new IPEndPoint(IPAddress.Parse("127.0.0.1"), nca_psync);
Socket clientSockSync = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
clientSockSync.Connect(ipEndSync);
//komunikat Login
string loginReq = "<FIXML v=\"5.0\" r=\"20080317\" s=\"20080314\"><UserReq UserReqID=\"0\" UserReqTyp=\"1\" Username=\"BOS\" Password=\"BOS\"/></FIXML>";
byte[] loginReqByte = Encoding.ASCII.GetBytes(loginReq);
byte[] loginReqLen = BitConverter.GetBytes(loginReqByte.Length);
clientSockSync.Send(loginReqLen);
clientSockSync.Send(loginReqByte);
//odebranie potwierdzenia
byte[] responceData = new byte[4];
int receivedBytesLen = clientSockSync.Receive(responceData);
int responceDataLen = BitConverter.ToInt32(responceData, 0);
responceData = new byte[responceDataLen];
receivedBytesLen = clientSockSync.Receive(responceData);
string loginResponce = Encoding.ASCII.GetString(responceData);
0

A nie dziala oznacza ... ?

0

Ok kod uruchomiony. Wiedziałem, że brakuje jakiejś deklaracji na początku kodu i na podstawie znalezionych podobnych pododawałem co trzeba i wygląda to tak (oczywiście skompilowany bez błędu):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;

namespace regEnum
{
    class Program
    {
        static void Main(string[] args)
        {
            //odczytanie parametrów podłączenia do socketa z rejestru
            RegistryKey regKey = Registry.CurrentUser.CreateSubKey("Software\\COMARCH S.A.\\NOL3\\7\\Settings");
            int nca_pasync = 0;
            int.TryParse(regKey.GetValue("nca_pasync", "0").ToString(), out nca_pasync);
            int nca_psync = 0;
            int.TryParse(regKey.GetValue("nca_psync", "0").ToString(), out nca_psync);
            int ncaset_pasync = 0;
            int.TryParse(regKey.GetValue("ncaset_pasync", "0").ToString(), out ncaset_pasync);
            int ncaset_psync = 0;
            int.TryParse(regKey.GetValue("ncaset_psync", "0").ToString(), out ncaset_psync);

            //otwarcie socketa synchronicznego
            IPEndPoint ipEndSync = new IPEndPoint(IPAddress.Parse("127.0.0.1"), nca_psync);
            Socket clientSockSync = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
            clientSockSync.Connect(ipEndSync);
            //komunikat Login
            string loginReq = "<FIXML v=\"5.0\" r=\"20080317\" s=\"20080314\"><UserReq UserReqID=\"0\" UserReqTyp=\"1\" Username=\"BOS\" Password=\"BOS\"/></FIXML>";
            byte[] loginReqByte = Encoding.ASCII.GetBytes(loginReq);
            byte[] loginReqLen = BitConverter.GetBytes(loginReqByte.Length);
            clientSockSync.Send(loginReqLen);
            clientSockSync.Send(loginReqByte);
            //odebranie potwierdzenia
            byte[] responceData = new byte[4];
            int receivedBytesLen = clientSockSync.Receive(responceData);
            int responceDataLen = BitConverter.ToInt32(responceData, 0);
            responceData = new byte[responceDataLen];
            receivedBytesLen = clientSockSync.Receive(responceData);
            string loginResponce = Encoding.ASCII.GetString(responceData);
        }
    }
}

Poproszę o "zretuszowanie" tego co dodałem o niezbędne rzeczy, bo zapewne z czymś przesadziłem.

0

Ja to widzę tak:

using System;
using System.Text;
using Microsoft.Win32;
using System.Net;
using System.Net.Sockets;

namespace regEnum
{
class Program
{
static void Main()
{
//odczytanie parametrów podłączenia do socketa z rejestru
RegistryKey regKey = Registry.CurrentUser.CreateSubKey("Software\COMARCH S.A.\NOL3\7\Settings");
int ncaPasync;
if (regKey != null) int.TryParse(regKey.GetValue("nca_pasync", "0").ToString(), out ncaPasync);
int ncaPsync = 0;
if (regKey != null) int.TryParse(regKey.GetValue("nca_psync", "0").ToString(), out ncaPsync);
int ncasetPasync;
if (regKey != null) int.TryParse(regKey.GetValue("ncaset_pasync", "0").ToString(), out ncasetPasync);
int ncasetPsync;
if (regKey != null) int.TryParse(regKey.GetValue("ncaset_psync", "0").ToString(), out ncasetPsync);

        //otwarcie socketa synchronicznego
        IPEndPoint ipEndSync = new IPEndPoint(IPAddress.Parse("127.0.0.1"), ncaPsync);
        Socket clientSockSync = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
        clientSockSync.Connect(ipEndSync);
        //komunikat Login
        const string loginReq = "<FIXML v=\"5.0\" r=\"20080317\" s=\"20080314\"><UserReq UserReqID=\"0\" UserReqTyp=\"1\" Username=\"BOS\" Password=\"BOS\"/></FIXML>";
        byte[] loginReqByte = Encoding.ASCII.GetBytes(loginReq);
        byte[] loginReqLen = BitConverter.GetBytes(loginReqByte.Length);
        clientSockSync.Send(loginReqLen);
        clientSockSync.Send(loginReqByte);
        //odebranie potwierdzenia
        byte[] responceData = new byte[4];
        clientSockSync.Receive(responceData);
        int responceDataLen = BitConverter.ToInt32(responceData, 0);
        responceData = new byte[responceDataLen];
        clientSockSync.Receive(responceData);
        Encoding.ASCII.GetString(responceData);
    }
}

}

0

Też jest OK.
Dodatkowo wykasowałem deklaracje namespace...
Teraz o wiele łatwiej będzie mi poznawać język, na już działających kodzie.

0

Jak sie masz uczyc, to sie ucz porzadnie i namespace zostaw jak jest.

0

Może pokusiłbyś się o zamianę tego kodu dla C++?
(wolałbym pracować w tym języku)

0
walec napisał(a)

Może pokusiłbyś się o zamianę tego kodu dla C++?
(wolałbym pracować w tym języku)

Nie pokusiłbym się.

1 użytkowników online, w tym zalogowanych: 0, gości: 1