2011-12-20 2 views
0

Могу ли я отправлять и получать UDP-дейтаграммы в одном и том же сокете, я использую для связи по протоколу TCP. В приложении есть мультимедийная связь, для которой я должен использовать UDP для связи. Если я создаю новый сокет, он выбрал исключение для свойств LingerState и NoDelay. Когда я присваиваю экземпляр старого сокета другой переменной Socket, это не позволяет мне изменять свойства, так как большинство свойств читаются Only.I Отправить данные в TCP-соединенной области.Использование разных протоколов в одном приложении с использованием одного и того же сокета

* Код *

Оправа SendingSocket = новый сокет (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint Endp = новый IPEndPoint (IPAddress.Parse («192.168.3.233»), порт);

SendingSocket.Bind (Endp);

в то время как (SendingSocket.Connected)
{ строка Message = "Тестирование сообщений Отправка по UDP"; ASCIIEncoding Encode = новое ASCIIEncoding(); byte [] MessageBytes = Encode.GetBytes (Message); SendingSocket.SendTo (MessageBytes, 0, MessageBytes.Length, SocketFlags.None, Endp); } '

+1

TCP и UDP работают совершенно по-разному. TCP поддерживает постоянное соединение между клиентом/сервером, пока оно не будет закрыто/отключено. UDP не делает. Любое программное обеспечение, которое, как я видел, нуждается в обоих, имеет два сокета, один для TCP, а другой для UDP. – GeoffM

+0

Я просто спрашиваю, что это требование приложения. То, что я связываю разделительно – Samie

ответ

0

Нет. Вы не можете использовать тот же сокет для TCP и UDP. Сокет привязан только к одному протоколу.

+0

В моем случае SocketA привязан к TCP. Я хочу создать связь SocketB для UDP. Когда я создал таким образом, он исключил исключения с кодами ошибок ** 10045 ** и ** 10042 ** .. Я думаю, что исключения, возникающие при создании объекта Socket Object под SocketA, подключенного к MachineA..meanwhile, я также намерен общаться с MachineA. – Samie

+0

показать нам некоторый код .. – jgauffin

+0

Socket SendingSocket = новый Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint Endp = новый IPEndPoint (IPAddress.Parse («192.168.3.233»), порт); SendingSocket.Bind (Endp); while (SendingSocket.Connected); { строка Сообщение = "Тестирование сообщения, отправляющего через UDP"; ASCIIEncoding Encode = новое ASCIIEncoding(); byte [] MessageBytes = Encode.GetBytes (Message); SendingSocket.SendTo (MessageBytes, 0, MessageBytes.Length, SocketFlags.None, Endp); } ' – Samie

1

Трудно сказать из этого фрагмента кода, но, возможно, вам не нужен SendingSocket.Bind(Endp), так как ваш SendingSocket.SendTo также включает конечную точку IP. Также попробуйте просто

SendingSocket.SendTo(MessageBytes, Endp); 
Смежные вопросы