C/C++ :: Set Timeout On A Socket Using Select Function
Mar 24, 2014
As requested by an exercise I have to write a function which:
- takes as parameter 1 unsigned which represent a timout value, 1 string which represent an IP address and an array containing port's numbers
- sends an UDP packet (1024 byte with NULL content) to each pair <IP,port>
- waits for the first reply, if it receives a packet within the timeout (set by select() function), the function returns the port of the process who replied, else it returns -1
I think I can do anything of above, but I've not understood how to set and use the select() in this case.
This is my code as it is at the moment
#define BUFLEN 1024
int comUDP ( unsigned timeout, char* ip, int ports[] ) {
int s_ds_sock, c_ds_sock;
struct sockaddr_in server_socket, client_socket;
char msg[BUFLEN] = NULL; //message to send to the clients
fd_set fds;
I wanted to create an asynchronous/non-blocking udp client server application where the client and server were supposed to chat away with each other without waiting for each other's turns. I came to know that this could be done by select()... here is my Server(Mentioning only the communication part):
At first on the server side I wrote: int rv = select(n, &readfds, &writefds, NULL, NULL);
But that led to the printing of an entire empty array on the server console when the server initialised in addition to the fact that communication between the server and client was not proper. removing "&writefds" did remove the redundant data but the improper communication issue still persists...
I am trying to write a program for a multiuser chat. I am trying to use select() function but I still cannot use the server for multiusers. I am able to access only one client at a time. I am running the code in Windows 7 using Visual Studio's Command Prompt. Here is the server code.
im trying to read in 1 array and get 2 as outputs from 3 different functions.my read array is easy enough were im getting confused is how to read that array, separate it and take out only the parts i want and place them into a 2nd, then again a 3rd array.i have the following so far:
this compiles without a complaint, but when i go to run it no longer responds after taking the 10th element (well 9th if counting from 0).I think i have the if correct for the even odd section, but when i try to populate B or C array with the output of that if statement from A is were i think things are dying...
I just started on a project on c++ and I was wondering if it is possible to add a select option (where the c++ program requires the user to select an option) . I couldn't find this anywhere.
I am trying to test my client-server socket program wherein the client connects to the server,client sends a message, server receives it and echo back to the client.So far, in the program server receives the message from the client, prints it BUT when it tries to send the message back to the client it shows an error.
sendto(): Invalid argument.I am new to socket programming.
Code:
//Server #include<stdio.h> //printf #include<string.h> //memset #include<stdlib.h> //exit(0) #include<netinet/in.h> #include<sys/socket.h> #define BUFLEN 512 //Max length of buffer #define PORT 10003 //The port on which to listen for incoming data }
I know that where I have the intIndex++ line is wrong. It's just going to stop at the last index and call it good, but I don't know how to make it stop at the matching name. The only examples I can ever seem to find use the foreach loop to print out a value, and I'm clearly just not understanding this enough to make it work for me.
Instructions are: --Declare a variable to store the result of the search, int intIndex; --Use an if statement with the Contains method to check if the name in the search box is in the queue. --If Contains is true, initialize intIndex to zero and use a foreach to walk through queue, else display a message that the name is not in the list. --If a match is found use intIndex to select the matching entry in listbox and display a message indicating the name was found. Be sure to increment intIndex each time through the loop.
private void btnSearchByName_Click(object sender, EventArgs e) { //delcare int variable to use as the index for the list box int intIndex; //If Contains is true if (cstrName.Contains(txtSearchName.Text))
I am trying to select 3 questions randomly from a string array and create another array with the randomly selected questions then display them in labels.
As you can see in the code I have used Array.Clear method to remove the selected question from the array to prevent duplicate questions being selected. For some reason this is not working! The "Randomly" selected question is ALWAYS the 5th element [4] of the randomQuestions array and this element is duplicated for each iteration of the loop.
public void shuffleQuestions() { string questionselected; string[] randomQuestions = { "What is the speed limit from the time you pass an Accident sign until you have passed the crash site?", "What must you do at a red traffic light?", "What is the maximum possible speed limit on the open road?",
I have been working on my own custom web browser. If i insert a web browser in my tab control and name it i can easily just go webbrowser1.Navigate() in my button click to use the webbrowser methods.
I made a method CreateTab and it automatically adds a web browser to my tab along with a default web page. My problem is selecting this webbrowser in other button clicks so i can call Home, Back, forward, etc.
Here is me method for creating a tab.
private void CreateTabItem() { //create a new tab TabItem item = new TabItem(); item.Header = "Fitness" + i ; WebBrowser browser = new WebBrowser(); //browser.Name = "Website";
I'm having issues with selecting the next item in sequence in a combobox dropdown. The dropdown consists of letters A-Z and there is a timer that I have running to change the letter every x minutes. What I need to do is if, for example, letter A is selected, when the timer goes off, it will change to letter B, etc. If it's at letter Z, it needs to go back to the first item, letter A.
I'm attempting to write a little UDP socket library in c++ on linux so a user can just create a new instance of a UDPSocket class, specify destination ip and port, and just connect. Then the user should be able to call send() or receive() in any order they want.. and here I encounter a little problem..
Most of the tutorials for udp socket sending out there include a bind() call when you create your "server" that is supposed to receive data, but the code that send data does not need one. Because I also want my library to support unicast/broadcast/multicast, I have read that I need to set the socket option SO_REUSEADDR on my sockets (since multiple sockets will need to be connected to same destination IP/port for broadcast/multicast)
My question is.. do I need to create 2 socket handles per "UDPSocke in order to make this work? One for sending and one for receiving data? In my code when I try to work with only 1 socket, it is only able to receive stuff from itself on unicast.. Or should I just remove the SO_REUSEADDR when in unicast mode, then try to bind with both sockets, accept that the bind will only work on the 1st socket, and take it from there?
I am trying to send a packet across a client/server communication. I am getting a seg fault (while running the program(It compiles fine)) when I try to read the neighbor file, You should be able to see this below the comment /***** Read neighbor file***/ :
I'm having a bit of trouble learning how to multithread a socket server. I have everything working perfectly fine, but it only accepts one client (I would like multiple clients). some sort of example (I have troubles understanding some things, unless its visual).
I have some paper work to do about a game I should be able to play with my class mates. We should be able to send and recive a struct concerning about the 'moves' of the pieces at the game. This struct is made of 4 ints, simple as that.
I had a previous paper work to do where I'd have to send ints and that was ok, but now that I have to send a struct I'm failing to do so. This is What I've tried:
//SERVER struct message{ int code; int piece; int x; int y; }send; bytes_sent=write(new_socket,&send,sizeof(message)); cout<<bytes_sent;
So far so good, I see 16 as bytes_sent's value.
On the other hand:
//CLIENT struct message{ int code; int piece; int x; int y; }recive; bytes_recvd=read(my_socket,&recive,sizeof(message)); cout<<bytes_recvd;
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace test {
[Code] ....
I don't know if this is a bug in Winsock or the .NET Framework but i need to fix this or workaround. Recently I was working on a networking class and this error is breaking everything.
If you add Thread.Sleep(1) after Send() call then "TCP Bug detected" doesnt get executed but its not a reliable fix.
I have written a socket witch send an image 256x256 and now i want to send many images and i don't know what loop to write to make the socket after have sent the first image to send another and not to write the same program many times for every image ......
this is the part that read the binary image
if( !(fp=fopen("Anemos.bmp","rb"))) { printf("Unable to load bin file: %s... ","Anemos.bmp");
#include <iostream> #include <ctime> #include <cstdlib> //This program prompts the user to select a number between 2 and 12 //computer throws two dices //player win if selected number matches the sum of the two dices thrown by computer