{"id":14986389,"url":"https://github.com/ivan-sincek/chat-app","last_synced_at":"2025-04-11T20:32:13.463Z","repository":{"id":40524007,"uuid":"170274605","full_name":"ivan-sincek/chat-app","owner":"ivan-sincek","description":"Multithreading TCP server and client communicating over TCP/IP - Windows Forms Application.","archived":true,"fork":false,"pushed_at":"2021-08-04T07:31:25.000Z","size":91,"stargazers_count":52,"open_issues_count":0,"forks_count":20,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-29T05:34:53.831Z","etag":null,"topics":["c-sharp","chat-application","multithreading","networking","tcp-client","tcp-server","visual-studio","windows","windows-forms"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivan-sincek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-12T07:44:22.000Z","updated_at":"2025-02-26T16:12:23.000Z","dependencies_parsed_at":"2022-07-16T23:30:59.657Z","dependency_job_id":null,"html_url":"https://github.com/ivan-sincek/chat-app","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchat-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchat-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchat-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchat-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivan-sincek","download_url":"https://codeload.github.com/ivan-sincek/chat-app/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248476422,"owners_count":21110278,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","chat-application","multithreading","networking","tcp-client","tcp-server","visual-studio","windows","windows-forms"],"created_at":"2024-09-24T14:12:48.026Z","updated_at":"2025-04-11T20:32:08.447Z","avatar_url":"https://github.com/ivan-sincek.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chat App\n\nWindows Forms Application made in Visual Studio Community 2019 v16.7.6 and written in C# (.NET Framework v4.6.1).\n\nApplication is made for sole purpose of showing how to implement `TcpListener` and `TcpClient` classes, as well as asynchronous read and write functions.\n\nUsed `ConcurrentDictionary` class which is a thread-safe collection of key/value pairs to store client information.\n\nUsed `Task` class to prevent race conditions.\n\nServer uses multithreading to accept clients (i.e. server can accept multiple clients).\n\nCheck the code in these two files:\n\n* [/src/Server/Server/Server.cs](https://github.com/ivan-sincek/chat-app/blob/master/src/Server/Server/Server.cs)\n* [/src/Client/Client/Client.cs](https://github.com/ivan-sincek/chat-app/blob/master/src/Client/Client/Client.cs)\n\nTested on Windows 10 Enterprise OS (64-bit).\n\nMade for educational purposes. I hope it will help!\n\nFuture plans:\n\n* create server and client classes,\n* ~~option to hide the key field.~~\n\n## How to Run\n\nRun Server.exe and Client.exe.\n\n---\n\nYou can use [ngrok](https://ngrok.com) to give your server a public address:\n\n```fundamental\nngrok.exe tcp 9000\n```\n\nFor more options run `ngrok.exe -h`.\n\n## Images\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://github.com/ivan-sincek/chat-app/blob/master/img/server.jpg\" alt=\"Server\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eFigure 1 - Server\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://github.com/ivan-sincek/chat-app/blob/master/img/client.jpg\" alt=\"Client\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eFigure 2 - Client\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-sincek%2Fchat-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivan-sincek%2Fchat-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-sincek%2Fchat-app/lists"}