PLEASE!! A client and Server banking system (With concurrency control)
Hi all need a little help.
I�ve been asked to create a banking system program that will allow multi clients (on the same network) to share the same information for example (the same text file).
The system will need to
Display a balance.
Withdraw from account.
Deposit Account.
And transfer form on account to another.
The text file will have something like this
1025 5.90 1026 8.17 1027 100.00
once a transaction has been implemented the text file needs to be up dated.
I don�t what someone to do this for me. I just know that something like this has been done before and wish to modify some code to my own speciation.
Thanks for any links or code that could help me :)
i thought the idea of you going to university was to learn how to do this sort of stuff so that you would be able to apply it in the real world, not to just copy it off someone else.
How long do you have to do this?? if you are skilled enough in java to be able to understand the program and just edit it to your specifications then surely you are skilled enough to be able to write it yourself from scratch. Or is this a "left it to the last minute" problem??
There are loads of client server example apps on the web, some use databases, you want to use a text file. Thats not hard to change.
I will help you if you need it, but you have to have actually bothered to have a go yourself
Similar Messages
-
Strange problem with SQLPLUS when client and server on the same box
Hi,
I have the problem with SQLPLUS when clinet and server on the same machine.
With client and server on the same machine i am running the command
sqlplus -l username/password@connect_identifier as SYSDBA.
With this command, even if you pass in wrong username or wrong password or both as wrong you can able to connect to database and execute queries.
Once Connect_identifier is correct and trying to log in as SYSDBA ,sqlplus will log in to DB with any username and password.
How to get rid of this behaviour. Is there any way to do this.
I am running this command by creating a process in C#
Edited by: user11000236 on Jun 16, 2009 10:31 AMuser11000236 wrote:
Thanks for the info.
How does Oracle/SQLPLUS allows any username or password to log in to DB with SYSDBA Privillages? What is the concept behind this.?
This is explainted in the above mentioned link:
Operating system authentication takes precedence over password file authentication. If you meet the requirements for operating system authentication, then even if you use a password file, you will be authenticated by operating system authentication. -
Hi ,
Iam trying to configure client and server on OEL5.5 on vmware server i ahve 2 virtual machines which are on network i want to make one machine as server and another as client so on server machine i have a database called as SERVER and iam creating a listerner for it and my listener is created i chked my listener.ora files but on termianal when i execute
LSNRCTL> STATUS LISTENER1
TNS-01101: Could not find service name
LSNRCTL>
LSNRCTL> START LISTENER1
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener1.log
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle10g.home.com)(PORT=2525)))
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
Linux Error: 98: Address already in use
Listener failed to start. See the error message(s) above...
and copying and pasting the contents of listener.ora file
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle10g.home.com)(PORT = 2525))
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = server)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME = server)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle10g.home.com)(PORT = 1521))
so as there is only 2 listeners on my machine named as listener which listens at 1521(default) and another which i created listener2 listens as 2525
so please help me and let me know where iam going wrong
Thanks in advance ....
with Regards
Kavitauser12665759 wrote:
Hi ,
Iam trying to configure client and server on OEL5.5 on vmware server i ahve 2 virtual machines which are on network i want to make one machine as server and another as client so on server machine i have a database called as SERVER and iam creating a listerner for it and my listener is created i chked my listener.ora files but on termianal when i execute
LSNRCTL> STATUS LISTENER1
TNS-01101: Could not find service name
LSNRCTL>
LSNRCTL> START LISTENER1
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener1.log
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle10g.home.com)(PORT=2525)))
TNS-12542: TNS:address already in useThose last two lines tell the tale. Something else is running on port 2525. Why are you trying to use that port for your listener?
Use netstat to find out what process is using the port.
And as a follow-up, why configure two listeners?
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
Linux Error: 98: Address already in use
Listener failed to start. See the error message(s) above...
and copying and pasting the contents of listener.ora file
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle10g.home.com)(PORT = 2525))
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = server)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME = server)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle10g.home.com)(PORT = 1521))
so as there is only 2 listeners on my machine named as listener which listens at 1521(default) and another which i created listener2 listens as 2525
so please help me and let me know where iam going wrong
Thanks in advance ....
with Regards
Kavita -
I am trying to run a UDP Client and Server by running the server first and then the client. But when I try to do that I get the message java.lang.NoClassDefFoundError: UDPServer and java.lang.NoClassDefFoundError: UDPClient. I have included the code below. Can you please help. Thank you.
UDPClient.java:
import java.io.*;
import java.net.*;
import java.util.*;
public class UDPClient{
public static void main(String[] args) throws IOException{
Date d=new Date();
long time1, time2, ETE, sumETE, maxETE, avgETE;
if(args.length!=1){
System.out.println("type java UDPClient <hostname>");
return;
time1=d.getTime();
DatagramSocket s=new DatagramSocket();
String st=new String("dldfjsdkjf");
byte[] buf=new byte[256];
buf=st.getBytes();
InetAddress address=InetAddress.getByName(args[0]);
DatagramPacket p = new DatagramPacket(buf, buf.length, address, 8777);
s.send(p);
p=new DatagramPacket(buf, buf.length, address, 8777);
s.receive(p);
time2=d.getTime();
ETE=(time2-time1)/2;
s.close();
UDPServer.java:
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
public class UDPServer{
public static void main(String[] args){
try{
UDPServerThread ust = new UDPServerThread();
ust.start();
catch(IOException e){}
UDPServerThread.java:
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
public class UDPServerThread extends Thread{
DatagramSocket s=null;
BufferedReader br=null;
PrintWriter pw=null;
public UDPServerThread() throws IOException{
this("UDPServer");
public UDPServerThread(String name) throws IOException{
super(name);
s=new DatagramSocket(8777);
public void run(){
char[] ca=new char[10];
//while(true){
try{
byte[] buf = new byte[256];
DatagramPacket p = new DatagramPacket(buf, buf.length);
s.receive(p);
String st=new String(p.getData());
for(int i=0; i<10; i++){
ca=st.charAt(i);
buf=st.getBytes();
InetAddress ad = p.getAddress();
int port = p.getPort();
p = new DatagramPacket(buf, buf.length, ad, port);
s.send(p);
catch(IOException e){
System.err.println("Failed to run the server");
System.exit(-1);
s.close();this has nothing to do with your code, but how you are running it. It is a classpath problem.
You should go to the directory where the UDPClient.class is, and type
java -classpath . UDPClient
similarly for the UDPServer -
Abap proxies ( Client and Server proxies)
Hi Team
Good day to you. I am now started doing some example scenarios on ABAP proxies(ie Client and Server proxies). After going through the blogs which are avialable, i am writing this question to you for clarification.
As per my understanding, the below are the required predefined settings which i need to do in my landscape to generate abap proxies(ie client and server proxies).
My landscape includes the below systems.
System A : SAP XI 3.0 system and
System B : SAP R/3 on WAS 620
SAP R/3 predefined Steps
1.Create HTTP connection in the business system.
2.Configuration Business system as local Integration Engine.
3. Connection between Business System and System Landscape Directory.
4. Maintaining the SAP J2EE Connection Parameters for LCRSAPRFC and SAPSLDAPI in SAP J2EE engine
(Here in the step 4, i found the below needs to be done)
1. Goto J2EE Engine
2. Choose Cluster --> Server --> Services. JCo RFC provider
3. Under RFC destination specify the following:
Program ID: LCRSAPRFC
Gateway Host: <Integration Server host>
Gateway Service: <Integration Server gateway service>
Number of process: 3
4. Under Repository specify the following:
5. Choose Set.
Application Server: <Integration Server host>
(i am not able to perform the steps which comes under point 4. so please Guide me how to goto J2EE engine and configure accordingly.
5. Maintain SLD access details in Transaction SLDAPICUST.
As per my understanding, i need to do the above predefined configuration steps in SAP R/3 system (ie bussiness System) for doing Abap Client or Server proxies.
And in the meantime, i would like to know whether i need to do any predefined configuration steps in XI 3.o system also. Please check and suggest me accordingly.
Once i get clarification on predefined configuration steps, i will proceed with the example scenarios on client and server proxies which are already in SDN.
Thanks in advance.
Regards
RajHello Pavan
thanks for your response. you said that for the connection type 'H' we need to provide values for GATEWAY HOST and GATEWAY SERVICE but here i need to create the RFC destination of type 'T'. so please tell me whether i need to give the values for GATEWAY HOST and GATEWAY SERVICE for connection type 'T' also and the second thing is please tell me the difference between Application system and bussiness system accordingly to my landscape which i mentioned in my question.
I am in little confusion because as per the requirement for abap proxies in the blog they mentioned that all these setting should be done in the bussiness system (ie SAP R/3) but you are saying that Application system. so please clarify.
My landscape which i am going to use in Abap proxy generation
System A: XI 3.0
System B: R/3
Here which is bussiness system and which is application system. Pls calrify.
Thanks in advance.
Regards
Raj -
JSSE Client and server communication problem .err:untrusted server cert
Hai all,
I am trying to communicate JSSE client and server.
I have created root.cert(CA),root.key,server.cert,server.key , client.cert and client.key. All these certificates are created using openssl.
I have placed root.cert in default keystore cacerts.
I have created a keystores(server & client) name mykeystore.
I have placed root.cert and client.cert in the client keystore.
I have placed root.cert and server.cert in the server keystore.
But during the run time i am getting javax.net.ssl.SSLException: untrusted server cert chain.
please suggest the modifications needs to be done to fix the error.
please tell me In the client keystore and in the server keystore....what certificates we need to put?
whether my approach as said above is correct or not?
In java code how to specify this particular certificate we are referring?
I have coded in this way ....
SSLContext ctx;
KeyManagerFactory kmf;
KeyStore ks;
char[] prasad = "prasad".toCharArray();
ctx = SSLContext.getInstance("SSLv3");
kmf = KeyManagerFactory.getInstance("SunX509");
ks = KeyStore.getInstance("jks");
ks.load(new FileInputStream("mykeystore"), prasad);
kmf.init(ks, prasad);
ctx.init(kmf.getKeyManagers(), null, null);
factory = ctx.getSocketFactory();
But my doubt is we are specifying only keystore name with that how it will check root.cert(ca) and client.cert and server.cert?
Is there any modifications need in my code?
Please tell me some way ...
Thanks ,
Prasad.Hi prasad,
There will be a problem with the certificates being received from thr remote server or client. Check that your trust store contains the certificate of the remote machine or the CA that signed it and that the certificate has not expired.
Also be sure that both machines are using the latest version of the JSSE.
Hope this will help you.
Regards,
Anil.
Technical Support Engineer. -
To_char displays different results on sql client and server
Hi,
I am executing the below query on my database with 8.1.7.4 version:
SQL> select to_char(to_date('20-OCT-07'),'D') from dual;
The following result is displayed:
T
7
When the same query is being run through sqlplus client(9.2.0.3) connecting to the same database, following result is being displayed:
SQL> select to_char(to_date('20-OCT-07'),'D') from dual;
T
6
Could anyone please explain me why is this difference and what parameter setting needs to be made to get the same result.
Thanks in advance,
VishwanathOr from the territory part of NLS_LANG OS variable :
oracle@xxx:/home/oracle# echo $NLS_LANG
AMERICAN_AMERICA.UTF8
oracle@xxx:/home/oracle# sqlplus '/ as sysdba'
SQL*Plus: Release 9.2.0.8.0 - Production on Mon Oct 22 10:44:59 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
SQL> select to_char(to_date('20-OCT-07'),'D') from dual;
T
7
SQL> quit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
oracle@xxx:/home/oracle# export NLS_LANG=AMERICAN_FRANCE.UTF8
oracle@xxx:/home/oracle# sqlplus '/ as sysdba'
SQL*Plus: Release 9.2.0.8.0 - Production on Mon Oct 22 10:45:38 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
SQL> select to_char(to_date('20-OCT-07'),'D') from dual;
T
6
SQL>Check it on both sites (client and server).
Nicolas. -
Hai all,
I am trying to communicate jsse client and server.
It is showing socket closed error.
when will we get java.net.SocketException: Socket closed?
please tell me way to sort this problem
Thanks,
Prasad.Hi prasad,
There are two reasons for this error to occur
java.net.SocketException: Socket closed
(i)First is that the provider is not registered properly. Check your java.security files and make sure that you have created an entry for
com.sun.net.ssl.internal.ssl.Provider.
Then make sure that there are no extra java.security files on your hard drive that are being used by your runtime configure your providers. If there make sure to add the providers to them also.
(ii) Secondly there may be problem with your keystore. Make sure that you are providing the proper file and password for your keystore.
If you are using SSL socket server then check the following code:
SSLServerSocketFactory ssf = (SSLServerSocketFactory )SSLServerSocketFactory.getDefault();
ServerSocket ss = ssf.createServerSocket(PORT);
Socket s = ss.accept();
If you are using regular sockets, perform the following:
ServerSocket ss = new ServerSocket(PORT);
Hope this will help you.
Regards,
Anil.
Technical Support Engineer. -
Hi,
I have installed FIM CM Client on one machine and FIM CM update service on another machine. Both are windows server 2008 r2 machines.
When i try to enroll a permanent smart card for a user, its shows me the following error:-
The version of OLE on the client and server machines does not match. (Exception from HRESULT: 0x80010110)
Also there is no logging done for the particular event.
I am able to change my smart card pin and view my smart card info. through the FIM CM client.
Is there a compatibility issue of FIM CM 2010 with Windows server 2008 r2?
ThanksHi,
Sorry for the delay in reply.
Please try the following steps first:
Open Powershell as Administrator
Go to Start--> Run and type wbemtest.exe.
•Click Connect.
•In the namespace text box type "root" (without quotes).
•Click Connect.
•Click Enum Instances…
•In the Class Info dialog box enter Superclass Name as "__ProviderHostQuotaConfiguration" (without quotes) and press OK. Note: the Superclass name includes a double underscore at the front.
•In the Query Result window, double-click "__ProviderHostQuotaConfiguration=@"
•In the Object Editor window, double-click HandlesPerHost.
•In the Value dialog, type in 8192
•Click Save Property.
•Click Save Object.
Under properties find the property "MemoryPerHost" or any other ones you need to modify and double click it
Change the value from 512 MB which is 536870912 to 1GB which is 1073741824
Click Save Property
Click Save Object.
•Close Wbemtest.
•Restart the computer.
And if all nodes are Windows server 2012, install the following update rollup as well:
Windows RT, Windows 8, and Windows Server 2012 update rollup: August 2013
http://support.microsoft.com/KB/2862768
If you have any feedback on our support, please send to [email protected] -
Client and Server in one process
Hi all,
I am trying to create a process which can act as both Client and Server.
How can I do this?
Thanks!AH. That's a better definition or explanation. Thanks.
This smells of a single process with multiple threads, each thread handling the basic needs of your requirements. In other words, have a thread deal with making one or more client type connections (use a main thread - the client controller - to spawn client-connection threads. This assumes you need multiplicity in your client-connection model.
Then make another thread - the server controller - to handle inbound connections, spawning a new thread for each inbound connection. Your main thread, the one that contains your main method, can watch everything that's going on and log or report what's going on in your client and server threads.
Going into specifics would be a lot to do here. Maybe someone is up for the challenge. Of course, this being a "New to Java Technology" forum, these concepts may be a bit beyond your skillset.
This is not the only way to go about solving your problem, but it's the only way I can think of at the moment given your requirements.
Hope this helps some. -
How to create client and server app using node.js in firefox os.
I want to create a client and server app using node.js for firefox os. Please suggest me how to create a apps.
I want to send a request from client to server and based on client request, service reply to client.
If any links available, Please share it.
ThanksHi sb00349044,
The SUMO forums focuses on end-user support.
For questions about developing for Firefox OS, you will find better guidance in MDN, StackOverflow, and mailing lists:
* [https://developer.mozilla.org/en-US/Firefox_OS MDN - Firefox OS]
* [http://stackoverflow.com/questions/tagged/firefox-os StackOverflow - Firefox OS]
* [https://lists.mozilla.org/listinfo Mailing Lists at Mozilla]
Thanks,
- Ralph -
Communication between two jvm (client and server)
Hi ,
I want to access the UME service of the SAP J2EE Container using a stanalone client application.
So the client would be running on remote JVM.
Here we use the JNDI service to communicate between the client and server.
p.put(Context.INITIAL_CONTEXT_FACTORY,"com.sap.engine.services.jndi.InitialContextFactoryImpl");
p.put(Context.PROVIDER_URL, providerURL.trim());
p.put(Context.SECURITY_PRINCIPAL, securityPrinciple.trim());
p.put(Context.SECURITY_CREDENTIALS, securityCredentials.trim());
Context ctx = (Context) new InitialContext(p);
Object objRef = ctx.lookup(ejbName.trim());
I want to know that is the communication between the client and server secured in this scenario
Best Regards
ManojOkay, the client and server VMs are different implementations of the Hotspot engine. Hotspot basically takes the Java bytecode from your .class files and turns it into native machine instructions at runtime. (The optimizations are actually much more complex than that, but that's the basic concept.)
The client VM is so named because it's designed to be used for GUI-type applications interacting with the user. It is designed to have a quicker startup and smaller memory footprint.
The server VM uses more memory and is typically slower at starting up than the client VM, but can often perform ridiculously fast. This of course depends completely on the particular code being run, and you should probably profile and see which VM works better for your application.
Some interesting optimizations are performed by the 1.4.1 server VM, such as: removal of array-bounds checks (when it determines that the index can't become out of bounds), inlining of methods, and more.
Here is a link to more info if you're interested:
http://java.sun.com/products/hotspot/docs/whitepaper/Java_HotSpot_WP_Final_4_30_01.html -
Connection between SDM client and server is broken
Dear All,
First of all this is what I have
-NW04 SPS 17
-NWDS Version: 7.0.09 Build id: 200608262203
-using VPN connection
-telnet on port 57018 is succesfull
I can login to SDM server (from NWDS and from SDM GUI) I can see the state of SDM(green light), restart it, can navigate through tabs in GUI, but every time I am trying to deploy an ear i have this error:
Deployment exception : Filetransfer failed: Error received from server: Connection between SDM client and server is broken
Inner exception was :
Filetransfer failed: Error received from server: Connection between SDM client and server is broken
I have already read a lot of topics,blogs,notes but didn't find the solution.
Can anybody help me?
Best RegardsHaving same issue. Nothing helped so far... Using NWDS 7.0 SP18.
I have turned SDM tracing on and this is what I see on client side after sending first data package:
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl: debug "20120224140253 0280/17 Client: finished sending string part"
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl: debug "20120224140253 0280/0 Client: receive String part from Server"
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl.receiveFromServer(NetComm ..): Entering method
com.sap.bc.cts.tp.net.NetComm.receive(): Entering method
com.sap.bc.cts.tp.net.NetComm: debug "Method "receive(char[])" could not read all requested bytes. There are still 12 bytes to read"
com.sap.bc.cts.tp.net.NetComm: debug "Caught IOException during read of header bytes (-1, 43):Connection reset"
com.sap.bc.cts.tp.net.NetComm: debug " throwing IOException(net.id_000001)"
com.sap.bc.cts.tp.net.NetComm.receive(): Exiting method
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl: Exiting method
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl: debug "20120224140253 0281/1 Client: connection was broken"
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl: Exiting method
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl: debug "20120224140253 0281/0 Client: finshed sendAndReceive"
com.sap.sdm.is.cs.cmd.client.impl.CmdClientImpl: Exiting method
My connection on server is still active so I have to restart SDM server to reset and try it again.
Anyone have idea whats happening?
Edited by: skyrma on Feb 24, 2012 2:46 PM
Edited by: skyrma on Feb 24, 2012 2:47 PM
Edited by: skyrma on Feb 24, 2012 2:47 PM -
Hello. I would like to write async tcp client and server. I wrote this code but a have a problem, when I call the disconnect method on client or stop method on server. I can't identify that the client or the server is no longer connected.
I thought I will get an exception if the client or the server is not available but this is not happening.
private async void Process()
try
while (true)
var data = await this.Receive();
this.NewMessage.SafeInvoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
How can I determine that the client or the server is no longer available?
Server
public class Server
private readonly Dictionary<IPEndPoint, TcpClient> clients = new Dictionary<IPEndPoint, TcpClient>();
private readonly List<CancellationTokenSource> cancellationTokens = new List<CancellationTokenSource>();
private TcpListener tcpListener;
private bool isStarted;
public event Action<string> NewMessage;
public async Task Start(int port)
this.tcpListener = TcpListener.Create(port);
this.tcpListener.Start();
this.isStarted = true;
while (this.isStarted)
var tcpClient = await this.tcpListener.AcceptTcpClientAsync();
var cts = new CancellationTokenSource();
this.cancellationTokens.Add(cts);
await Task.Factory.StartNew(() => this.Process(cts.Token, tcpClient), cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
public void Stop()
this.isStarted = false;
foreach (var cancellationTokenSource in this.cancellationTokens)
cancellationTokenSource.Cancel();
foreach (var tcpClient in this.clients.Values)
tcpClient.GetStream().Close();
tcpClient.Close();
this.clients.Clear();
public async Task SendMessage(string message, IPEndPoint endPoint)
try
var tcpClient = this.clients[endPoint];
await this.Send(tcpClient.GetStream(), Encoding.ASCII.GetBytes(message));
catch (Exception exception)
private async Task Process(CancellationToken cancellationToken, TcpClient tcpClient)
try
var stream = tcpClient.GetStream();
this.clients.Add((IPEndPoint)tcpClient.Client.RemoteEndPoint, tcpClient);
while (!cancellationToken.IsCancellationRequested)
var data = await this.Receive(stream);
this.NewMessage.SafeInvoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
private async Task Send(NetworkStream stream, byte[] buf)
await stream.WriteAsync(BitConverter.GetBytes(buf.Length), 0, 4);
await stream.WriteAsync(buf, 0, buf.Length);
private async Task<byte[]> Receive(NetworkStream stream)
var lengthBytes = new byte[4];
await stream.ReadAsync(lengthBytes, 0, 4);
var length = BitConverter.ToInt32(lengthBytes, 0);
var buf = new byte[length];
await stream.ReadAsync(buf, 0, buf.Length);
return buf;
Client
public class Client
private TcpClient tcpClient;
private NetworkStream stream;
public event Action<string> NewMessage;
public async void Connect(string host, int port)
try
this.tcpClient = new TcpClient();
await this.tcpClient.ConnectAsync(host, port);
this.stream = this.tcpClient.GetStream();
this.Process();
catch (Exception exception)
public void Disconnect()
try
this.stream.Close();
this.tcpClient.Close();
catch (Exception exception)
public async void SendMessage(string message)
try
await this.Send(Encoding.ASCII.GetBytes(message));
catch (Exception exception)
private async void Process()
try
while (true)
var data = await this.Receive();
this.NewMessage.SafeInvoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
private async Task Send(byte[] buf)
await this.stream.WriteAsync(BitConverter.GetBytes(buf.Length), 0, 4);
await this.stream.WriteAsync(buf, 0, buf.Length);
private async Task<byte[]> Receive()
var lengthBytes = new byte[4];
await this.stream.ReadAsync(lengthBytes, 0, 4);
var length = BitConverter.ToInt32(lengthBytes, 0);
var buf = new byte[length];
await this.stream.ReadAsync(buf, 0, buf.Length);
return buf;Hi,
Have you debug these two applications? Does it go into the catch exception block when you close the client or the server?
According to my test, it will throw an exception when the client or the server is closed, just log the exception message in the catch block and then you'll get it:
private async void Process()
try
while (true)
var data = await this.Receive();
this.NewMessage.Invoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
Console.WriteLine(exception.Message);
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
By the way, I don't know what the SafeInvoke method is, it may be an extension method, right? I used Invoke instead to test it.
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.
Click
HERE to participate the survey. -
Communication between client and server
I am using sockets for communication between the client and the server. is there any other way that i can use for communication between the client and server???
Plenty of ways: JMS, SOAP, RMI, a RESTful API, writing-files-to-a-shared-directory-on-the-disk, Sneakernet, ...
Some of them use sockets (or better TCP/IP) as the underlying protocol.
But to give you a good answer, you would have to tell us why you want a different way. I hope you're not searching for a different way just for the sake of being different.
Maybe you are looking for
-
I live at Uni, and our only access to the internet is through the ethernet ports in our wall. I got sick of not being able to use my laptop away from my desk, and draining my data while in my room. It works fine on my laptop (using it now) and both m
-
Can we join the transparent and pooled tables?
hi friends, i have a doubt that is when we want to get the data from transparent and pooled tables it is not possible to join the tables. so should we go with nested select statements or is there any way to get the data? with better performance if i
-
Correcting the Green screen tint appearing while loading images to the screen?
.... the Infamous Green tint that invades the screen, is still there on a whole lot of images - not all, a problem which occurs while images are loading to the screen for viewing. And it's on both the iMac whee it started, and the Macbook. It was a p
-
"Your iPhone could not be activated because the activation server is temporarily unavailable." this massage showing after i update through itune
-
Mail: return to the sender...
Since I installed Lion I miss very much the possibility to return a mail to the sender. I wonder if it there´s any way to do it now. Regards.