This is two article very easy written by C# a server support multi users can chat from client in a local network.
Server side:
http://www.daveoncsharp.com/2009/08/csharp-chat-application-over-asynchronous-udp-sockets-part-1/
Client side:
http://www.daveoncsharp.com/2009/08/csharp-chat-application-over-asynchronous-udp-sockets-part-2/
Tien tuts
Wednesday, 31 December 2014
Friday, 19 December 2014
Single instance in c#
Today, I will share an easy way to create a single instance application in C#.
Add Microsoft.VisualBasic in references by righ click to References -> Add Reference...
Default content of Program.cs is:
Change to:
Add Microsoft.VisualBasic in references by righ click to References -> Add Reference...
Default content of Program.cs is:
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApplication1 { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }
Change to:
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using Microsoft.VisualBasic.ApplicationServices; namespace DesktopServer { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); string[] args = Environment.GetCommandLineArgs(); SingleInstanceController controller = new SingleInstanceController(); controller.Run(args); } } public class SingleInstanceController : WindowsFormsApplicationBase { public SingleInstanceController() { IsSingleInstance = true; StartupNextInstance += this_StartupNextInstance; } void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) { Form1 form = MainForm as Form1; //My derived form type } protected override void OnCreateMainForm() { MainForm = new Form1(); } } }
Wednesday, 17 December 2014
Example using android remote desktop to control mouse via wifi
I searched an easy and helpful source code an android app connect with c# server in desktop via wifi and control mouse in desktop in here. Behind is content:
After my last post about .NET – Android, I was pretty excited about the possibilities. Therefore, I decided to create a new little “useful” app for my phone.
If your mouse batteries are low and you have to finish something, you can use your phone as a mouse.
If your mouse batteries are low and you have to finish something, you can use your phone as a mouse.
How it works on Android:
I created an app which captures the movements on the screen and sends the positions over a socket (UDP) to my PC. My “protocol” supports following commands:
I created an app which captures the movements on the screen and sends the positions over a socket (UDP) to my PC. My “protocol” supports following commands:
| D.CLICK | Sending a double click. (Not really necessary.) |
|---|---|
| CLICK | Sending a click. (2x “click” => same as d.click.) |
| X,Y | Sending delta x and y. 0,1 or 1,0 etc. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
| @Overridepublic boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: { final float x = event.getX(); final float y = event.getY(); // last position this.lastX = x; this.lastY = y; // first position this.firstX = x; this.firstY = y; // click time this.clickDown = new Date(); break; } case MotionEvent.ACTION_MOVE: { // new position final float x = event.getX(); final float y = event.getY(); // get delta final float deltax = x - this.lastX; final float deltay = y - this.lastY; // set last position this.lastX = x; this.lastY = y; try { // prepare message -> x,y byte[] message = (deltax + "," + deltay).getBytes("UTF-8"); // package definition. ip of pc and port. this.packet = new DatagramPacket(message, message.length, InetAddress.getByName("192.168.0.150"), 8000); // send package this.socket.send(this.packet); } catch(Throwable e) { e.printStackTrace(); } break; } case MotionEvent.ACTION_UP: { // get current position final float x = event.getX(); final float y = event.getY(); // get delta final float deltaX = this.firstX - x; final float deltaY = this.firstY - y; Date now = new Date(); byte[] message = null; try { // when the users clicks and holds over 1 second send a double click to the pc. if (deltaX < this.tolerance[0] && deltaX > this.tolerance[1] && deltaY < this.tolerance[0] && deltaY > this.tolerance[1] && now.getTime() - this.clickDown.getTime() >= 1000) { message = ("d.click").getBytes("UTF-8"); // When the users clicks (not holding) send a normal click to the pc. } else if (x == this.firstX && y == this.firstY) { message = ("click").getBytes("UTF-8"); } if (message != null) { // prepare and send package -> d.click or click this.packet = new DatagramPacket(message, message.length, InetAddress.getByName("192.168.0.150"), 8000); this.socket.send(this.packet); } } catch (Throwable e) { e.printStackTrace(); } break; } } return true;} |
Application on the PC:
I created an application, which receives the packages and sets the cursor position on the PC:
I created an application, which receives the packages and sets the cursor position on the PC:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
| public partial class MainWindow : Window{ // Dll import. -> method mouse_move [DllImport("user32.dll")] static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); private EndPoint point; private Socket receiveSocket; private byte[] recBuffer; private int speed = 2; // Flags for mouse_event api [Flags] public enum MouseEventFlagsAPI { LEFTDOWN = 0x00000002, LEFTUP = 0x00000004, MIDDLEDOWN = 0x00000020, MIDDLEUP = 0x00000040, MOVE = 0x00000001, ABSOLUTE = 0x00008000, RIGHTDOWN = 0x00000008, RIGHTUP = 0x00000010 } public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { // initilization and listening receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); point = new IPEndPoint(IPAddress.Any, 8000); this.recBuffer = new byte[60]; receiveSocket.Bind(point); receiveSocket.BeginReceiveFrom(recBuffer, 0, recBuffer.Length, SocketFlags.None, ref point, new AsyncCallback(MessageReceiveCallback), (object)this); } private void SendClick() { // Send click to system mouse_event((int)MouseEventFlagsAPI.LEFTDOWN, 0, 0, 0, 0); mouse_event((int)MouseEventFlagsAPI.LEFTUP, 0, 0, 0, 0); } private void MessageReceiveCallback(IAsyncResult result) { EndPoint remote = new IPEndPoint(0, 0); string pos = ""; try { // get received message. pos = Encoding.UTF8.GetString(recBuffer); // clicked? if (pos.StartsWith("click")) this.SendClick(); // long click = double click else if (pos.StartsWith("d.click")) { this.SendClick(); this.SendClick(); } // Otherwise move else { // calculate delta int deltaX = (int)float.Parse(pos.Substring(0, pos.IndexOf(","))) * this.speed; int deltaY = (int)float.Parse(pos.Substring(pos.IndexOf(",") + 1, pos.IndexOf("\0") + 1 - pos.IndexOf(",") + 1)) * this.speed; // set new point System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; System.Windows.Forms.Cursor.Position = new System.Drawing.Point(pt.X + deltaX, pt.Y + deltaY); } } catch (Exception) { Console.Write(pos); } // End and "begin" for next package this.receiveSocket.EndReceiveFrom(result, ref remote); receiveSocket.BeginReceiveFrom(recBuffer, 0, recBuffer.Length, SocketFlags.None, ref point, new AsyncCallback(MessageReceiveCallback), (object)this); }} |
Watch the video! 
Subscribe to:
Comments (Atom)