Server kicks off clients counting each client as two logins

I Have a Mac OSX Server (version 10.3) that has a 20 Client Connection limit. I have 11 client computers all running Mac OSX (also version 10.3). All of the users in these clients are in OpenDirectory and have their home folder on the server. They all also need to access another share on the server all the time. I have Workgroup manager set up to share the required folder and automount it on all clients as /Network/ShareName. All of this works great until I have all 11 clients active at the same time. Apparently each AFP share takes up an individual connection on the server, so nine clients make 18 connections, the server takes up one connection, and the last 2 machines can no longer log in. I have already attempted to change the sharing protocol from AFP to NFS on the secondary share, hopefully circumventing the 20 Client Connection Limit (I didn’t think NFS shares would count toward the total client connection limit, as I thought the total connection limit only counted toward AFP), but as I discovered, the simultaneous client connections govern the whole server, not just AFP. My goal is to make this transparent to the end users who generally know nothing about computers or client/server technology and don’t need to be taught how to use the “Finder -> Go -> Connect To Server” command (and besides, using the Profile tool in Workgroup Manager, this command is disabled for them).
I come from a Linux and Microsoft Windows background and the idea of tracking connections this way does not make sense to me. In Windows a client connection counts for a machine and that machine can use as many resources from the server as they want while still counting as one client connection. And with Linux there is no Client Licensing in this sense. Am I doing something wrong? Is there another solution to map these drives? Coming from my Unix side I thought about just making a link in the users home directories to this share (i.e. /Volumes/Users/<Username>/Share => /Volumes/Share), but when I tried a symbolic link (i.e. ln –s /Volumes/Share /Volumes/Users/<Username>/Share), when it is mapped on the user’s computer it doesn’t work because it looks for the /Volumes/Share on the local computer. And when I tried a hard link (i.e. ln /Volumes/Share /Volumes/Users/<Username>/Share), I got an error message because you can’t link across different volumes. Either of these options would have solved my problem, as would getting each client to only take up one connection to the server even thought they are using two file shares, but I cannot get them to work. Any help in the matter would be greatly appreciated!
Unfortunately, my background with this server and network is limited, as I “inherited” it when the regular network admin moved on. As far as I can tell, the server is setup with a big hard drive split in to three volumes, the Boot volume, the User Homes volume and the Reference Material volume (as I called “Share” above).
\ (Boot)
|
|-Volumes
|-Share
|-Users
I am sure my linking method would work if everything were on the same volume, but this doesn’t really fix the problem, and I am in no rush to backup, reformat and reinstall this computer. In my opinion this isn’t a proper solution either. I also thought about purchasing more Client Access licenses, but I don’t know if they can be easily added or how that would even work, since the client access license limit is hard coded into the server serial number used when originally setting up the machine. Any help in this matter would be greatly appreciated as well.

Which version of Mac OS X Server, specifically, are you running?
This article explains that Apple changed (fixed?) the concurrent user count to be based on simultaneous machines, not simultaneous connections in 10.3.3.
Your simplest solution may just be to upgrade the server.
Note also thai the article specifically calls out 'automounted share points'. I don't know if manual mounts count in the same way, but that might be worth looking at.

Similar Messages

  • Can the server kick the client?

    Hello,
    how can I realize, that the server is able to quit the connection to the client?
    thx
    Tobias

    Well there may be a way to extract the socket reference from the client reference, and close it;
    but I suspect most clients would think this a network related failure, and simply reconnect to your server.
    Basically, once a reference to your server is given to a client, either using a registry, or some other method; that client is free to pass it around to other remote clients, and all of them can use it to contact your server.
    I think that's a neat part of RMI, I use that tecnhique a lot in my free RMI project : https://cajo.dev.java.net
    RMI is not like a standard socket-based network application. It is intended to allow access to an object in one VM, by other remote VMs. The socket mechanism is abstracted away, in fact, you can even run RMI on non-socket based communication channels. Why I've even heard that one crazy guy managed to get RMI working over UDP! :-) http://www.rmiproxy.com/download/RMI-UDP.zip
    (BTW: rmiproxy.com has some excellent solutions, if you are in a position to purchase them)
    If not being able to disconnect clients is a feature you can't work without, then perhaps RMI is not the right technology for your application, but I hope it can be, because it's so cool! :-)

  • UIX - unable to turn off client and server side field validation

    Hello,
    I've scoured the forums for info on how to turn off client / server side field validation, for the very common case of a Cancel button. Here's the use case:
    User enters a page displaying records of some kind that can be edited, or an option to create a new one. User clicks create, is taken to a new data entry form. Before entering any data, the user decides he isn't interested, and clicks the cancel button.
    The problem I'm having is that I'm getting messages that required fields have no values. I have found several references on this forum that setting the submitButton attribute unvalidated="true" will turn off client side validation. Here's what my submitButton looks like:
    <submitButton text="Cancel" event="success" unvalidated="true"/>
    But I am still getting errors, such as:
    JBO-27014: Attribute ListName in DealerListAppModule.WebDlrListsView1 is required
    Now I have also seen references in the forums to turning off server side validation by overriding the validatModelUpdates method in the DataAction. I have done this too. No luck.
    Any ideas why this isn't working? I have seen other posts in the forums stating that there were improvements in JDev 10.1.2 that caused a create but not insert, where you could just navigate away from the page you were on, without having to worry about rolling back the create of a new record. I am also not seeing this behavior either. I am using 10.1.2, completely updated, but when I execute a create, if I navigate back from the create page to the original one without saving (i had to fool with this to get it to work because of the validation problems above), I am still seeing the blank, created record in my rowset. I originally created my project in 9.0.5.2, but am now using 10.1.2, and having migrated the project.
    So what's the deal? What's the definitive way to turn off both client side and server side validation, and what's the status of this create but not insert functionality?
    Brad

    Haven't worked with this but possibly this method of "deactivation" is not valid in 11gR2? Have you cross checked that with Oracle support?

  • Counting the Number of days since Project Kick off for each task

    I'm a bit of a newbie to Project, so forgive me if this is simple.  I have a project plan that 318+/- entries long complete with estimated duration, start and end dates. I'm now being asked to provide these entries (in addition to the dates)
    in cumulative duration.  That is to say that is to say that they want to know how many after the projects kick off will this line item complete. 
    Does  a simple way exist?

    wbicknell --
    Create a custom task Duration field and name it something like Days from Start.  In this custom Duration field, enter the following formula:
    ProjDateDiff([Project Start], [Start], "Standard")
    This formula will calculate the difference between the current Start date of each task and the Start date of the entire project using the Standard calendar.  If your project is using any calendar other than the Standard calendar as the Project calendar
    (Project > Project Information), then enter the name of that calendar in the formula instead of the Standard calendar. In the Calculation for Task and Group Summary section of the dialog, be sure to select the "Use formula" option to force it
    to calculate Duration values for summary tasks.  Hope this helps.
    Dale A. Howard [MVP]
    VP of Educational Services
    msProjectExperts
    http://www.msprojectexperts.com
    http://www.projectserverexperts.com
    "We write the books on Project Server"

  • SCEP 2012 clients kicking off random scans

    We have an SCCM 2012 environment with SCEP 2012 recently deployed. We have a policy in place that does weekly full scans on Tuesdays at 12AM.  The client machines are 64 bit Windows 7.  We are seeing some random computers kicking off Full scans
    at various points in the day.  We thought that initially there were viruses on these machines and that was causing the scans, but according to the EP console, they do not have any type of virus or malware.
    Any ideas?

    Here is the way MS does such things. (Update works this way too) It is STUPID, of course, but then "SMART" is not a word that fits Microsoft very well. Just look at Windows 8 for an example or to the fact you can't even find a simple link to the
    SCEP client for what ever happens to be the latest greatest version.
    As for the auto scanning, it will occur REGARDLESS of the time set shortly after you start your PC if it was not able to do it at the appointed time. So if it is set for 12am, and if the system, for whatever reason was not on, it will kick off shorty after
    it is booted, REGARDLESS of the current time. (It is supposed to wait until the system is idle, but MS uses lack of keyboard or mouse action to decide if a system is active instead of actually looking to see if its. For example watching a movie. MS would say
    after five minutes, it is inactive, then run the scan, screen save, update, or whatever. Maybe you were just reading a long email, letter, or article online, doesn't matter MS will kick off the scheduled event. Of course this will cause problems for the movie
    etc, but MS won't care. Bottom line is if the MS AV is doing its job, or anyone's Av for that matter, and was installed on a 100% clean PC, then one should NEVER need to do a blind system scan. Common sense really. Of course MS AV is not very good at preventing
    the more destructive of the evils out there such as the Ransomewares and things like the ASK or the Google toolbar or the many fake "fix your PC" popups that are out there etc. etc.
    Best just to keep it disabled.
    Ralph

  • Problem using Java Webstart to kick off CORBA Client

    Dear all,
    I am currently having a problem in using the Java Webstart to kick off
    the CORBA Client, I set up the JNLP file jvm properties as following:
    <resources>
    <j2se version="1.4*" java-vm-args="-Xms64m -Xmx256m -verbose -esa
    -Xnoclassgc -client -Dswing.useSystemFontSettings=false ">
         <resources>
         <property name="vbroker.orb.initRef"
    value="NameService=corbaloc::10.35.55.82:20005/NameService"/>
    </resources>
    </j2se>
    </resources>
    The problem I have is that when the webstart starting the client, the
    client just simply dies during the startup and I find the log message
    following:
    org.omg.CORBA.ORBPackage.InvalidName
         at com.inprise.vbroker.orb.ORB.resolve_initial_references(ORB.java:943)
    So it is showing that there is problem with the vbroker.orb.initRef
    setting, know that if I don't use the webstart to start the client and
    simply use the windows batch file, using the jvm properties as:
    java -Dvbroker.orb.initRef=NameService=corbaloc::10.31.51.80:20001/NameService
    It would work perfectly.
    Could you tell if I miss anything when configuing the webstart jnlp
    file on this regard? Currently, I think that the only way I can set
    the JVM properties in the JNLP file is to use its properties tag to
    set the system properties for the application.
    Thanks heaps in advance for any help you can give here !!!
    Victor

    Hi, Andre,
    No, I have tried both of your suggestion and there was no joy. I still have the following error and the client jvm just crashes during starting up:
    org.omg.CORBA.ORBPackage.InvalidName
         at com.inprise.vbroker.orb.ORB.resolve_initial_references(ORB.java:943)
    I believe it is still related to the jvm properties:
    <property name="vbroker.orb.initRef" value="NameService=corbaloc::10.35.55.82:20005/NameService"/>
    And know that when I used "-Dvbroker.orb.initRef=NameService=corbaloc::10.35.55.82:20005/NameService" in the windows batch file, the client runs ok.
    Is this indicating that there is the limitation of using the webstart to invoke CORBA client?
    Any further help would be very appreciated!
    Victor

  • How to list IP address from client on the Server (TCP/IP CLIENT SERVER COMMUNICATION)

    Excuse me,
    In this project I want to ask how to add list IP from client that connect to server.
    I have edited slightly the project.
    'SERVER
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Threading
    Imports System.Threading.Tasks
    Imports System.Reflection
    Public Class ServerForm
    Private _Listener As TcpListener
    Private _Connections As New List(Of ConnectionInfo)
    Private _ConnectionMonitor As Task
    Private Sub Button_Checked(sender As System.Object, e As System.EventArgs) Handles StartStopButton.CheckedChanged
    If StartStopButton.Checked Then
    StartStopButton.Text = "Stop"
    StartStopButton.Image = My.Resources.StopServer
    _Listener = New TcpListener(IPAddress.Any, CInt(PortTextBox.Text))
    _Listener.Start()
    Dim monitor As New MonitorInfo(_Listener, _Connections)
    ListenForClient(monitor)
    _ConnectionMonitor = Task.Factory.StartNew(AddressOf DoMonitorConnections, monitor, TaskContinuationOptions.LongRunning)
    Else
    StartStopButton.Text = "Start:"
    StartStopButton.Image = My.Resources.StartServer
    CType(_ConnectionMonitor.AsyncState, MonitorInfo).Cancel = True
    _Listener.Stop()
    _Listener = Nothing
    End If
    End Sub
    Private Sub PortTextBox_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles PortTextBox.Validating
    Dim deltaPort As Integer
    If Not Integer.TryParse(PortTextBox.Text, deltaPort) OrElse deltaPort < 1 OrElse deltaPort > 65535 Then
    MessageBox.Show("Port number between 1 and 65535", "Invalid Port Number", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    PortTextBox.SelectAll()
    e.Cancel = True
    End If
    End Sub
    Private Sub ListenForClient(monitor As MonitorInfo)
    Dim info As New ConnectionInfo(monitor)
    _Listener.BeginAcceptTcpClient(AddressOf DoAcceptClient, info)
    End Sub
    Private Sub DoAcceptClient(result As IAsyncResult)
    Dim monitorinfo As MonitorInfo = CType(_ConnectionMonitor.AsyncState, MonitorInfo)
    If monitorinfo.Listener IsNot Nothing AndAlso Not monitorinfo.Cancel Then
    Dim info As ConnectionInfo = CType(result.AsyncState, ConnectionInfo)
    monitorinfo.Connections.Add(info)
    info.AcceptClient(result)
    ListenForClient(monitorinfo)
    info.AwaitData()
    Dim doUpdateConnectionCountLabel As New Action(AddressOf UpdateConnectionCountLabel)
    Invoke(doUpdateConnectionCountLabel)
    End If
    End Sub
    Private Sub DoMonitorConnections()
    Dim doAppendOutput As New Action(Of String)(AddressOf AppendOutput)
    Dim doUpdateConnectionCountLabel As New Action(AddressOf UpdateConnectionCountLabel)
    Dim monitorInfo As MonitorInfo = CType(_ConnectionMonitor.AsyncState, MonitorInfo)
    Me.Invoke(doAppendOutput, "Server Started")
    Do
    Dim lostCount As Integer = 0
    For index As Integer = monitorInfo.Connections.Count - 1 To 0 Step -1
    Dim info As ConnectionInfo = monitorInfo.Connections(index)
    If info.Client.Connected Then
    If info.DataQueue.Count > 0 Then
    Dim messageBytes As New List(Of Byte)
    While info.DataQueue.Count > 0
    Dim value As Byte
    If info.DataQueue.TryDequeue(value) Then
    messageBytes.Add(value)
    End If
    End While
    Me.Invoke(doAppendOutput, "Message from IP: " + System.Text.Encoding.ASCII.GetString(messageBytes.ToArray))
    End If
    Else
    monitorInfo.Connections.Remove(info)
    lostCount += 1
    End If
    Next
    If lostCount > 0 Then
    Invoke(doUpdateConnectionCountLabel)
    End If
    _ConnectionMonitor.Wait(1)
    Loop While Not monitorInfo.Cancel
    For Each info As ConnectionInfo In monitorInfo.Connections
    info.Client.Close()
    Next
    monitorInfo.Connections.Clear()
    Invoke(doUpdateConnectionCountLabel)
    Me.Invoke(doAppendOutput, "Server Stoped")
    End Sub
    Private Sub UpdateConnectionCountLabel()
    ConnectionCountLabel.Text = String.Format("{0} Connections", _Connections.Count)
    End Sub
    Private Sub AppendOutput(message As String)
    If RichTextBox1.TextLength > 0 Then
    RichTextBox1.AppendText(ControlChars.NewLine)
    End If
    RichTextBox1.AppendText(message)
    RichTextBox1.ScrollToCaret()
    End Sub
    Private Sub ClearButton_Checked(sender As Object, e As EventArgs) Handles ClearButton.CheckedChanged
    If ClearButton.Checked Then
    RichTextBox1.Clear()
    End If
    End Sub
    End Class
    Public Class MonitorInfo
    Private _listener As TcpListener
    Public ReadOnly Property Listener As TcpListener
    Get
    Return _listener
    End Get
    End Property
    Private _connections As List(Of ConnectionInfo)
    Public ReadOnly Property Connections As List(Of ConnectionInfo)
    Get
    Return _connections
    End Get
    End Property
    Public Property Cancel As Boolean
    Public Sub New(tcpListener As TcpListener, connectionInfoList As List(Of ConnectionInfo))
    _listener = tcpListener
    _connections = connectionInfoList
    End Sub
    End Class
    Public Class ConnectionInfo
    Private _monitor As MonitorInfo
    Public ReadOnly Property Monitor As MonitorInfo
    Get
    Return _monitor
    End Get
    End Property
    Private _Client As TcpClient
    Public ReadOnly Property Client As TcpClient
    Get
    Return _Client
    End Get
    End Property
    Private _DataQueue As System.Collections.Concurrent.ConcurrentQueue(Of Byte)
    Public ReadOnly Property DataQueue As System.Collections.Concurrent.ConcurrentQueue(Of Byte)
    Get
    Return _DataQueue
    End Get
    End Property
    Private _Stream As NetworkStream
    Public ReadOnly Property Stream As NetworkStream
    Get
    Return _Stream
    End Get
    End Property
    Public Sub New(monitor As MonitorInfo)
    _monitor = monitor
    _DataQueue = New System.Collections.Concurrent.ConcurrentQueue(Of Byte)
    End Sub
    Private _LastReadLength As Integer
    Public ReadOnly Property LastReadLength As Integer
    Get
    Return _LastReadLength
    End Get
    End Property
    Private _Buffer(63) As Byte
    Public Sub AcceptClient(result As IAsyncResult)
    _Client = _monitor.Listener.EndAcceptTcpClient(result)
    If _Client IsNot Nothing AndAlso _Client.Connected Then
    _Stream = _Client.GetStream
    End If
    End Sub
    Public Sub AwaitData()
    _Stream.BeginRead(_Buffer, 0, _Buffer.Length, AddressOf DoReadData, Me)
    End Sub
    Private Sub DoReadData(result As IAsyncResult)
    Dim info As ConnectionInfo = CType(result.AsyncState, ConnectionInfo)
    Try
    If info.Stream IsNot Nothing AndAlso info.Stream.CanRead Then
    info._LastReadLength = info.Stream.EndRead(result)
    For Index As Integer = 0 To _LastReadLength - 1
    info._DataQueue.Enqueue(info._Buffer(Index))
    Next
    'info.SendMessage("Data Diterima " & info._LastReadLength & " Bytes")
    info.SendMessage("reply form server: " & info._LastReadLength & " Bytes")
    For Each otherInfo As ConnectionInfo In info.Monitor.Connections
    If Not otherInfo Is info Then
    otherInfo.SendMessage(System.Text.Encoding.ASCII.GetString(info._Buffer))
    End If
    Next
    info.AwaitData()
    Else
    info.Client.Close()
    End If
    Catch ex As Exception
    info._LastReadLength = -1
    End Try
    End Sub
    Private Sub SendMessage(message As String)
    If _Stream IsNot Nothing Then
    Dim messageData() As Byte = System.Text.Encoding.ASCII.GetBytes(message)
    Stream.Write(messageData, 0, messageData.Length)
    End If
    End Sub
    End Class
    'CLIENT
    Imports System.Net
    Imports System.Net.Sockets
    Public Class ClientForm
    Private _Connection As ConnectionInfo
    Private _ServerAddress As IPAddress
    Private Sub ClientForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    ValidateChildren()
    End Sub
    Private Sub ConnectButton_Checked(sender As Object, e As System.EventArgs) Handles ConnectButton.CheckedChanged
    If ConnectButton.Checked Then
    If _ServerAddress IsNot Nothing Then
    ConnectButton.Text = "Disconnect"
    ConnectButton.Image = My.Resources.StopServer
    Try
    _Connection = New ConnectionInfo(_ServerAddress, CInt(PortTextBox.Text), AddressOf InvokeAppendOutput)
    _Connection.AwaitData()
    Catch ex As Exception
    MessageBox.Show(ex.Message, "Error Connecting to Server", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    ConnectButton.Checked = False
    End Try
    Else
    MessageBox.Show("Invlid IP Server", "Cannt Connect to Server", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    ConnectButton.Checked = False
    End If
    Else
    ConnectButton.Text = "Connect"
    ConnectButton.Image = My.Resources.StartServer
    If _Connection IsNot Nothing Then _Connection.Close()
    _Connection = Nothing
    End If
    End Sub
    Private Sub SendButton_Click(sender As System.Object, e As System.EventArgs) Handles SendButton.Click
    If _Connection IsNot Nothing AndAlso _Connection.Client.Connected AndAlso _Connection.Stream IsNot Nothing Then
    Dim buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(InputTextBox.Text)
    _Connection.Stream.Write(buffer, 0, buffer.Length)
    End If
    End Sub
    Private Sub ServerTextBox_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles IPTextBox.Validating
    _ServerAddress = Nothing
    Dim remoteHost As IPHostEntry = Dns.GetHostEntry(IPTextBox.Text)
    If remoteHost IsNot Nothing AndAlso remoteHost.AddressList.Length > 0 Then
    For Each deltaAddress As IPAddress In remoteHost.AddressList
    If deltaAddress.AddressFamily = AddressFamily.InterNetwork Then
    _ServerAddress = deltaAddress
    Exit For
    End If
    Next
    End If
    If _ServerAddress Is Nothing Then
    MessageBox.Show("Cannot resolve Server Address", "invalid Server", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    IPTextBox.SelectAll()
    e.Cancel = True
    End If
    End Sub
    Private Sub PortTextBox_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles PortTextBox.Validating
    Dim deltaPort As Integer
    If Not Integer.TryParse(PortTextBox.Text, deltaPort) OrElse deltaPort < 1 OrElse deltaPort > 65535 Then
    MessageBox.Show("Port number between 1 and 65535", "invalid Port number", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    PortTextBox.SelectAll()
    e.Cancel = True
    End If
    End Sub
    Private Sub InvokeAppendOutput(message As String)
    Dim doAppendOutput As New Action(Of String)(AddressOf AppendOutput)
    Me.Invoke(doAppendOutput, message)
    End Sub
    Private Sub AppendOutput(message As String)
    If RichTextBox1.TextLength > 0 Then
    RichTextBox1.AppendText(ControlChars.NewLine)
    End If
    RichTextBox1.AppendText(message)
    RichTextBox1.ScrollToCaret()
    End Sub
    Private Sub ButtonClear_Click(sender As Object, e As EventArgs) Handles ButtonClear.Click
    RichTextBox1.Clear()
    InputTextBox.Clear()
    End Sub
    End Class
    Public Class ConnectionInfo
    Private _AppendMethod As Action(Of String)
    Public ReadOnly Property AppendMethod As Action(Of String)
    Get
    Return _AppendMethod
    End Get
    End Property
    Private _Client As TcpClient
    Public ReadOnly Property Client As TcpClient
    Get
    Return _Client
    End Get
    End Property
    Private _Stream As NetworkStream
    Public ReadOnly Property Stream As NetworkStream
    Get
    Return _Stream
    End Get
    End Property
    Private _LastReadLength As Integer
    Public ReadOnly Property LastReadLength As Integer
    Get
    Return _LastReadLength
    End Get
    End Property
    Private _Buffer(63) As Byte
    Public Sub New(address As IPAddress, port As Integer, append As Action(Of String))
    _AppendMethod = append
    _Client = New TcpClient
    _Client.Connect(address, port)
    _Stream = _Client.GetStream
    End Sub
    Public Sub AwaitData()
    _Stream.BeginRead(_Buffer, 0, _Buffer.Length, AddressOf DoreadData, Me)
    End Sub
    Public Sub Close()
    If _Client IsNot Nothing Then _Client.Close()
    _Client = Nothing
    _Stream = Nothing
    End Sub
    Private Sub DoreadData(result As IAsyncResult)
    Dim info As ConnectionInfo = CType(result.AsyncState, ConnectionInfo)
    Try
    If info._Stream IsNot Nothing AndAlso info._Stream.CanRead Then
    info._LastReadLength = info._Stream.EndRead(result)
    If info._LastReadLength > 0 Then
    Dim message As String = System.Text.Encoding.ASCII.GetString(info._Buffer)
    info._AppendMethod(message)
    End If
    info.AwaitData()
    End If
    Catch ex As Exception
    info._LastReadLength = -1
    info._AppendMethod(ex.Message)
    End Try
    End Sub
    End Class
    //ScreenShot server
    http://prntscr[dot]com/5t1ol3
    //Screenshot client
    http://prntscr[dot]com/5t1odj
    source: code[dot]msdn[dot]microsoft[dot]com/windowsdesktop/Simple-Multi-User-TCPIP-43cc3b44

    I have a similar chat application. When the user attempts to connect, instead of sending a simple string, the client sends a serialized object(xml string) with all relevant login and session information, this includes the user's IP address. Once the server
    receives said information, depending on the type of TCP broadcast (a custom enumerated type) information from one user may be passed to a single user, or distributed to many users.
    If it helps, here is the TCPBroadcast object I use. But in order for your server to understand it, you kind of have to build your server and client somewhat around it.
    Option Strict On
    Option Explicit On
    Option Infer Off
    Namespace TCPChat
    Public Class TCPBroadcast
    Public Property Message As String
    Public Property BroadCastTime As DateTime
    Public Property DestUser As String
    Public Property OriginUser As String
    Public Property PasswordHash As String
    Public Property BroadcastSourceIP As String
    Public Property BroadCastType As TCPBroadcastType
    Public Property LoginUserName As String
    Public Property FailureReason As String
    Public Function XmlEncoding() As String
    Dim serializer As New Xml.Serialization.XmlSerializer(GetType(TCPBroadcast))
    Dim XML As String = String.Empty
    Using memStream As New IO.MemoryStream
    Using xmlWriter As New Xml.XmlTextWriter(memStream, System.Text.Encoding.UTF8) With _
    {.Indentation = 4, .Formatting = System.Xml.Formatting.Indented}
    serializer.Serialize(xmlWriter, Me)
    End Using
    XML = System.Text.Encoding.UTF8.GetString(memStream.ToArray)
    End Using
    Return XML
    End Function
    Public Function ToBinary() As Byte()
    Return System.Text.Encoding.UTF8.GetBytes(Me.XmlEncoding)
    End Function
    Public Shared Function FromBinary(binary As Byte()) As DeserializationResult
    Dim xml As String = System.Text.Encoding.UTF8.GetString(binary)
    Return FromXML(xml)
    End Function
    Public Shared Function FromXML(xml As String) As DeserializationResult
    Dim DeserializationResult As New DeserializationResult
    DeserializationResult.Error = False
    Try
    Dim deserializer As New Xml.Serialization.XmlSerializer(GetType(TCPBroadcast))
    Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(xml)
    Using memStream As New IO.MemoryStream(buffer)
    DeserializationResult.tcpBroadCast = CType(deserializer.Deserialize(memStream), TCPBroadcast)
    End Using
    Catch ex As Exception
    DeserializationResult.Error = True
    DeserializationResult.ErrorMessage = ex.ToString
    DeserializationResult.AttemptedXML = xml
    End Try
    Return DeserializationResult
    End Function
    Public Class DeserializationResult
    Public [Error] As Boolean
    Public ErrorMessage As String
    Public tcpBroadCast As TCPBroadcast
    Public AttemptedXML As String
    Sub New()
    End Sub
    End Class
    Public Enum TCPBroadcastType
    AdministrativeMessage
    AuthenticationFailure
    AuthenticationSuccess
    ChatBroadcast
    CredentialsRequest
    Credentials
    DisconnectedByServer
    KeepAlive
    PrivateMessage
    ServerMessage
    SystemMessage
    UnableToProcessRequest
    End Enum
    End Class
    End Namespace
    “If you want something you've never had, you need to do something you've never done.”
    Don't forget to mark
    helpful posts and answers
    ! Answer an interesting question? Write a
    new article
    about it! My Articles
    *This post does not reflect the opinion of Microsoft, or its employees.

  • How to control one server with multiple clients via TCP/IP

    I am wanting to control a single server with multiple clients.  Only one client would be active at a time, so there would be no conflict.  I want to use TCP/IP.  So far, I have programmed a cluster that passes data back to the server with no problems.  The challenge come in when a second client is added to the mix.  I have't been able to figure out how to turn each client on and send the appropriate data and then turn it off so it doesn't keep sending the same data to the server. 
    Here are the things that I have considered and did some preliminary testing, but don't really know how to impliment:
    1.  Send a numeric on the front of the cluster packet that tells the server that data is on the way.
    2.  Send a boolean on the front of the cluster packet to somehow turn the server TCP/IP on.
    The problem I have found is that LabVIEW TCP/IP doesn't like to be turned on and off.  If it doesn't get the data it expects, it goes into a reset mode and that kills the response time.
    Any help?

    You should consider implementing a set of simple one-byte commands that can be sent back and forth between the Server and the Clients. You can base all of these ideas off the example in the Example Finder under Networking >> TCP and UDP called Multiple Connections - Server.
    You will have two loops in the server VI: one to wait for new connections, and one to send and receive data from the existing connections. For instance, after one of the clients connects, it can request control of the server to send data to it by sending the character "R" for request. Every time the send/receive loop of the Server executes, the first thing it can do is to check all the existing connections to see if any of the clients have sent a control request ("R"). If so, it will create a buffer (array) of control requests. This could be in the form of Connection IDs or indexes in the array for a particular Connection ID. Your choice.
    After the Server receives a request for contol, if it is not already under control by another client, then it can send a response to the first client on the control request list. For instance, the server could send the first client a "S" command for send. Note that after the clients send their control request, they should execute a TCP Read and wait indefinitely for the server to respond with the one-byte "S" command. Then, once the client in control is finished sending data to the server, it could send the character "X" telling the Server to release it from control.
    The example I mentioned above already does a similar thing. Note how when a client wants to disconnect, they send the letter "Q". You can see this in the Multiple Connections - Client VI. The Server then checks each individual connection to see if it's received this one-byte command, and if it has, it closes the connection to the client. This is what you would want to implement, but instead of having just one command, you'll have to distinguish between a few and build up a buffer of control requests.
    Finally, if a client does decide to disconnect in your application, they could send the command "Q" just like the example above. At this point, close the connection and remove that Connection ID from the array of connections. You will also have to handle the case that this client was in the request control waiting line when it disconnected, in which case you need to delete it from that array as well.
    This will definitely work for you, but it will take some work. Best of luck!
    Jarrod S.
    National Instruments

  • Load Balancing, Server and / or Client ?

    Hi
    I am experiencing a problem with the connection pooling in odp.net. I have a simple test app that creates a connection, executes a query, populates an object then closes the connection. I have found that when I have client side load balancing on via the odp.net connection string property many connections are made unnecessary (sometime the actual number created reaches the max pool size but the numbers differ randomly). It appears that rather than a free connection in the pool being used more connections are being created which defeats the point of having a connection pool. I do have server side load balancing configured correctly also. Due to this finding can someone possibly answer the following questions.
    a) Do I need both server side and client side load balancing set?
    b) If I do why is the above behaviour being seen? If not could you give me a short explanation as to why not?
    Current set up is 11g (patched to 6, awaiting 7 to be applied) RAC, 2 nodes.
    Below is the C# code used while testing this. The table queried is a simple person table containing 16000 rows if data.
    OcConnection = "User Id=XXX; Password=XXX; Connection Lifetime = 60; Data Source=(DESCRIPTION=(ADDRESS_LIST=(FAILOVER=on)(LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=tcp)(HOST=XXX)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=XXX)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MyFirstTest))); Pooling=true; HA Events = true; Load Balancing = true";
    Code:-
    Oracle.DataAccess.Client.OracleConnection con;
    con = new Oracle.DataAccess.Client.OracleConnection();
    con.ConnectionString =OcConnection;
    con.Open();
    // the command object to use for this test
    OracleCommand cmd = con.CreateCommand();
    cmd.CommandText = "select * from PERSON";
    OracleDataReader rdr = cmd.ExecuteReader();
    List<test> listTest = new List<test>();
    while (rdr.Read())
    test dc = new test();
    if (!rdr.IsDBNull(0))
    dc.id = Convert.ToInt32(rdr.GetValue(0));
    if (!rdr.IsDBNull(1))
    dc.forename = rdr.GetString(1);
    if (!rdr.IsDBNull(2))
    dc.surname = rdr.GetString(2);
    if (!rdr.IsDBNull(3))
    dc.street = rdr.GetString(3);
    if (!rdr.IsDBNull(4))
    dc.city = rdr.GetString(4);
    if (!rdr.IsDBNull(5))
    dc.postcode = rdr.GetString(5);
    if (!rdr.IsDBNull(6))
    dc.country = rdr.GetString(6);
    if (!rdr.IsDBNull(7))
    dc.email = rdr.GetString(7);
    if (!rdr.IsDBNull(8))
    dc.dateadded = rdr.GetDateTime(8);
    if (!rdr.IsDBNull(9))
    dc.randWords = rdr.GetString(9);
    if (!rdr.IsDBNull(10))
    dc.uniqueNumber = Convert.ToInt32(rdr.GetValue(10));
    listTest.Add(dc);
    rdr.Close();
    con.Close();
    rdr.Dispose();
    cmd.Dispose();
    con.Dispose();
    Thanks for your time
    Victoria

    Here are the HTTP Headers as monitored on the client side. Notice the good.txt file includes a GET as it's initial request. All works fine in this case. However, the initial request in the bad.txt is a POST. This is odd since the URL was opened using the same shortcut in both incidents and the browser was closed between each trace that was taken. I've also reviewed the shortcut with notepad to verify it does not include unwanted data such as the JSESSIONID info....etc.
    Once you have reviewed the HTTP headers, I have these questions.
    1. IIS is sending the 100 Continue messages as you mention, but why is the CSS injecting the cookie in a 100 response that is not typically processed by the client? The bad.txt file shows the client receiving two ARPT cookies because the first cookie in the 100 continue response was ignored.
    2. I know Cisco is not really in the business of troubleshooting browser behaviour. But do you know why the browser would behave differently....GET in one request and a POST in the next? We do not wish to get into modifying the browser, so I'm hoping we can provide a solution on the server side that will allow the browser to function this way if it chooses to do so. Do you think it would make sence to push the state management up a level to the cookie handed out by JRUN? This way, the cookie would not be handed back in a 100 response from IIS, and we could tell the CSS to monitor the JRUN cookie. Of course this would require we determine how to manage this cookie either by modifying to cookie to have static data for each server, or by using the right method of hashing...etc.
    Chris

  • Getting kicked off of VNC connection when logging into server

    We have noticed that when we log into the VNC server, and sign into the console of the server, that we get kicked off of the VNC connection. If we wait a few seconds then connect again we get the desktop of the server.
    What is causing this? I use JollysFastVNC 0.98.50 (928701) and a coworker of mine uses ChickenoftheVNC, both are on Macs. It is very annoying. I do like that when I'm done and I log off of the console that it also logs me out of the VNC connection. But kicking me out for logging in is absurd.
    Thanks,
    Ben
    PS. The server is Mac OS X 10.6.1 on a Mac Mini last generation, since they just came out with a new one.

    I linked to the free client. That is what runs on the computer that you you turn on in System Preferences --> Sharing, so you are going to want to install that on the server, not the machine you are connecting from. If you installed it on both it doesn't matter—it was there anyway as part of the OS. It is built into the OS, but a reinstall can fix problems and makes sure you have the latest version. The ARD application is what you would use to connect with from the machine you are sitting in front of. That is what costs money. Apple calling the software "client" can be confusing.
    Have you turned on the VNC option under either Screen Sharing or Remote Management. You will need that to connect with a third party VNC app like JollysFastVNC or Tight. If you don't turn that on then the built in Screen Sharing app should just work (accessible from Safari or the Connect to Server dialog in finder by typing vnc://ipofserver)
    It is hard to say if this is a SL bug, or a problem on your network since you only have one machine to test. You could try running Vine Server on your server. You will want to change it's port to something else like 5901, or at least turn off Screen Sharing so it doesn't conflict ports. If you change the port you would connect by typing vnc://ipofserver:5901
    In Vine be sure to use System Server (under Server menu) to keep vine running all the time, even after a reboot.
    Vine:
    http://www.macupdate.com/info.php/id/11283/vine-server-%26-viewer

  • Server 2012 Kms Host and Server 2008 r2 client.

    I have deployed a Server 2012 Kms host.
    Windows 7, and 8 are activating just fine, and Office 2010 is working.
    The issue I'm having is activating Server 2008 and Server 2008 r2.
    It seems I have missed a step that would allow me to activate those clients.
    Can someone please guide me as to what possibly needs to be done to allow these clients to activate?

    Hi,
    The following steps are needed to set up Volume Activation Services in a Windows Server 2012 test lab:
    1. Step 1: Set up the base test lab configuration
    2. Step 2: Install the Volume Activation Services server role
    3. Step 3: Configure Active Directory-based Activation
    4. Step 4: Verify that Active Directory-based Activation works
    5. Step 5: Configure Key Management Services (KMS)
    6. Step 6: Verify that KMS volume activation works
    At same time KMS volume activation requires
    a minimum threshold of 25 computers before activation quests will be processed. The verification process described here will increment the activation count each time a client computer contacts the KMS host. However, unless the activation threshold
    is reached, the verification will take the form of an error message rather than a confirmation message.
    The related KB:
    Test Lab Guide: Demonstrate Volume Activation Services
    http://technet.microsoft.com/en-us/library/hh831794.aspx
    Hope this helps.
    We
    are trying to better understand customer views on social support experience, so your participation in this
    interview project would be greatly appreciated if you have time.
    Thanks for helping make community forums a great place.

  • How can connect different ejb server in one client program

    hi , every
    i want to make connect ejb server into one client program.
    for that , but i try to change PROVIDER_URL property , it's not correct
    who solve this problem for novice? :(

    You need to create separate initialContext to each of the different servers
    and lookup up the different ejbs.
    -Sabha
    "inking" <[email protected]> wrote in message
    news:[email protected]..
    hi , every
    i want to make connect ejb server into one client program.
    for that , but i try to change PROVIDER_URL property , it's not correct
    who solve this problem for novice? :(

  • Sockets: How can server detect that client is no longer connected?

    Hi,
    I really need help and advice with the following problem:
    I have a Client - Server socket program.
    The server listens on port 30000 using a server socket on one machine
    The client connects to localhost on port 20000, previously creating an ssh port forward connection using the Jsch package from www.jcraft.com with
    "session.setPortForwardingL(20000, addr, 30000);"
    Then the client sends Strings to the server using a PrintWriter.
    Both are connected to each other through the internet and the server uses a dynamic dns service.
    This all works well until the IP address of the Server changes, The client successfully reconnects to the server using the dynamic dns domain name, but the server keeps listening on the old socket from the previous connection, while opening a new one for the new client connection. The server doesn't seem to notice that Client has disconnected because of this IP address change.
    looks like the server is stuck inside the while loop. If i cut the connection manually on the client side, the server seems to notice that the client has disconnected, and jumps out of the while look (see code below)
    this is the code I'm using for the server:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;
    import java.util.logging.Logger ;
    public class SocketHandler extends Thread {
        static Logger logger = Logger.getLogger("Server.SocketHandler");
        private Socket clientSocket = null;
        private BufferedReader in = null;
        private InputStreamReader inReader = null;
        public SocketHandler(Socket clientSocket) throws IOException {
            this.clientSocket = clientSocket;
            inReader = new InputStreamReader(clientSocket.getInputStream ());
            in = new BufferedReader(inReader);
        public void run() {
            try {
                String clientMessage = null;
                while ((clientMessage = in.readLine()) != null) {
                    logger.info("client says: " + clientMessage);
            } catch (IOException e) {
                logger.severe(e.getMessage());
                e.printStackTrace();
            } finally {
                try {
                    logger.info("closing client Socket: " + clientSocket);
                    clientSocket.close();
                    in.close();
                    ServerRunner.list.remove(clientSocket);
                    logger.info("currently "+ServerRunner.list.size()+" clients connected");
                } catch (IOException e) {
                    logger.severe (e.getMessage());
                    e.printStackTrace();
    }I've tried making the server create some artificial traffing by writing some byte every few seconds into the clients OutputStream. However I get no exceptions when the IP address changes. The server doesn't detect a disconnected socket connection.
    I'd really appreciate help and advice

    If a TCP/IP peer is shut down "uncleanly", the other end of the connection doesn't get the final end of connection packet, and read() will wait forever. close() sends the final packet, as will killing the peer process (the OS does the close()). But if the OS crashes or for some other reason can't send the final packet, the server never gets notification that the peer has gone away.
    Like you say, one way is timeout, if the protocol is such that there always is something coming in at regular intervals.
    The other way is a heartbeat. Write something to the other end periodically, just some kind of "hello, I'm here, ignore this message". The other end doesn't even have to answer. If the peer has gone away, TCP will retransmit your heartbeat message a few times. After about a minute it will give up, and mark the socket as broken. read() will then throw an IOException. You could send heartbeats from the client too, so that the client detects if the server computer dies.
    TCP/IP also has a TCP-level heartbeat; see Socket.setKeepAlive(). The heartbeat interval is about two hours, so it takes it a while to detect broken connections.

  • 10.4 Server - software update server - push to clients

    Hello all, after some advice.
    Weve recently built up a 10.4.7 Server running among other services, Software Update. We've been successfull in pushing out managed pref's to clients to retarget their update server etc, updates are working so thats fine..
    heres the issue. most of our mac clients arent admins, they are regular users, thus every time an update needs to install - it will prompt for an admin user's credentials, which we cant have happening.
    Is there a way, to configure either the update server or the clients, to receive updates and install them silently for instance? with no user intervention?
    One way im considering, its a bit messy though, is using apple remote desktop to issue a UNIX command to all selected Mac's, telling them to launch 'softwareupdate -i -r' and execute as root (afaik, you need to be root to execute softwareupdate manually or something) But this seems flaky in testing so far.
    Thanks for any help.
    Eliot.

    Excellent thanks for the suggestions guys... Ive been playing with the cron suggestion to begin with, it seems to work, as in it will download and install recommended updates. Although with the particular update I was trying to install, it didnt seem to follow through correctly.
    it was the latest firmware update for the INTEL iMac's, according to software update via the terminal, it had downloaded and installed the update, and then required a reboot. ok, but after reboot, it hadnt kicked into the firmware install mode. I actually had to download this update via the gui software update in order for it to function correctly, ie reboot, install firmware, reboot again. which is odd?? could be a problem for future updates like this, when using an automated cron task for updates? Or am I just missing something, hehe?
    Otherwise yeah, the ARD option sounds interesting, we're about to purchase ARD3, definately worth a look.

  • How can I determine what dns server the wifi client use within airport

    How can I determine what dns server the wifi client use within airport
    I want to use dns servers other then the one that airport extreme is using. For example I got the 172.16.1.1 (the default gateway - airport extreme), but I want to use the office dns servers, that are in a 10.x.x.x range.
    Is there a possibility?
    Thanks and happy eastern

    The Airport Extreme uses the DNS servers assigned by the network that it connects to. Is you Airport Extreme on the 10.x.x.x network? if it is then you are already using the 10.x.x.x DNS servers. Check your Airport Extreme with the Airport Utility and you will see in the Internet tab, the DNS servers used. The devices connecting to the Airport Extreme are assigned a DNS address of the Airport Extremes IP, In your case 172.16.1.1 but all DNS searches and resolution are done with the DNS servers you see in the Airport Extreme.
    If you want to use some other DNS then you can override in the Airport Extreme which will be used by all devices connecting too the Airport Extreme, Or you can edit the DNS address in each devices wireless settings.

Maybe you are looking for

  • Need graphics card advice.

    I purchased a new laptop from BB about 6 months ago, a Toshiba Satellite P875. I need a graphics card with at least 128mb of dedicated memory and think I only have a chip with 32mb of dedicated memory. I was wondering if anyone knows what would be go

  • Audio input too small for 1/4 mono adapter??? Help!!!

    Hi, I would like to record myself with garage band by plugging my bass in a 1/4 mono jack adapter in my macbook pro audio port. The problem is that when I plug the adapter, it goes to 2 / 3 of its size and blocks. I don't want to try to push the adap

  • Problems with FCP and System 10.5

    I have found an issue that has me pulling at my hair, and I don't have that much to pull. I repaired permissions and experienced quite a wait and it seems as though it is doing nothing but it is working so don't let that bother you I just waited it o

  • Wrong java.library.path in Netbeans?

    I write some java code and call native method with JNI, it does not work under netbeas, but work well in terminal. I try use System.out.println(System.getProperty("java.library.path")); to know what's wrong, i get two different output: netbeans: /usr

  • No folders in the library?

    just a question to organize my stuff, can i create folders in the library like as in flash?