通过互联网赢得套接字和通信 [英] Win socket and communication over internet

查看:76
本文介绍了通过互联网赢得套接字和通信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发了一个套接字程序,其中有一个聊天服务器和一个客户端。我在我的网络中测试这些应用程序,其中聊天服务器在计算机上运行,​​客户端正在另一台计算机上运行。当我运行客户端时,我只是给那台机器的IP
,其中聊天服务器正在运行。我的socket客户端可以通过IP与聊天服务器交互。如果我想通过互联网使用这个,那么告诉我如何设置。假设我的聊天服务器将在我们英国办事处的机器上运行,聊天客户端在我们的美国办事处运行
没有任何物理网络。如果我想通过互联网进行沟通,那么我需要做什么。请告诉我这样我可以设置我的聊天应用程序,因此他们可以通过互联网互相交谈.............谢谢。

i have developed a socket program where i have one chat server and one client. i test this apps in my network where chat server is running on a machine and client is running on another machine. when i run client then i just give the IP of that machine where chat server is running. my socket client can interact with chat server through IP. if i want use this over the internet then tell me how could i setup. suppose my chat server would run in a machine of our UK office and chat client run in our USA office there is no any physical network. if i want that communication should occur through internet then what i need to do. please tell me in such way i can setup my chat apps as a result they can talk to each other over the internet.............thanks.

推荐答案

查看此代码......它正是您想要的:

Check out this code... it exactly what you want:

客户:



使用System.IO;

使用System.Net;

使用System;

使用System.Threading;

使用N = System.Net;

使用System.Collections;

使用System.Windows.Forms;

使用System.ComponentModel;

使用System.Runtime.InteropServices;



类TalkUser {

   

   静态表格谈话;

    static N.Sockets.TcpClient TC;



    [DllImport(" kernel32.dll")]

    private static extern void ExitProcess(int a);

   

    public static void Main(){

        talk = new Form();

        talk.Text =" TalkUser - OFFICIAL TalkServ Client" ;;


        talk.Closing + = new CancelEventHandler(talk_Closing);

        talk.Controls.Add(new TextBox());

        talk.Controls [0] .Dock = DockStyle.Fill;

        talk.Controls.Add(new TextBox());

        talk.Controls [1] .Dock = DockStyle.Bottom;

       ((TextBox)talk.Controls [0])。Multiline = true;

       ((TextBox)talk.Controls [1])。Multiline = true;

        talk.WindowState = FormWindowState.Maximized;

        talk.Show();

       ((TextBox)talk.Controls [1])。KeyUp + = new KeyEventHandler(key_up);


        TC = new N.Sockets.TcpClient();

        TC.Connect("IP OF A SERVER HERE",4296);

       线程t =新线程(新的ThreadStart(运行));

        t.Start();

        while(true){

            Application.DoEvents();

       }

   }

   

    private static void talk_Closing(object s,CancelEventArgs e){

        e.Cancel = false;

        Application.Exit();

        ExitProcess的(0);

   }

   

    private static void key_up(object s,KeyEventArgs e){

        TextBox TB =(TextBox)s;

        if(TB.Lines.Length> 1){

            StreamWriter SW = new StreamWriter(TC.GetStream());


            SW.WriteLine(TB.Text);

            SW.Flush();

            TB.Text ="" ;;

            TB.Lines = null;

       }

   }

   

    private static void run(){

        StreamReader SR = new StreamReader(TC.GetStream());

        while(true){

            Application.DoEvents();

            TextBox TB =(TextBox)talk.Controls [0];

            TB.AppendText(SR.ReadLine()+ QUOT; \r\\\
");

            TB.SelectionStart = TB.Text.Length;

       }

   }

}

服务器:

使用System.IO;

使用System.Net;

使用System;

使用System.Threading;

使用N = System.Net;

使用System.Collections;



class TalkServ {

   

    System.Net.Sockets.TcpListener服务器;

    public static Hashtable句柄;

    public static Hashtable handleByConnect;

   

    public static void Main(){

        TalkServ TS = new TalkServ();

   }
$


    public TalkServ(){

        handles = new Hashtable(100);

        handleByConnect = new Hashtable(100);

        server = new System.Net.Sockets.TcpListener(4296);

        while(true){

            server.Start();

            if(server.Pending()){

                N.Sockets.TcpClient connection = server.AcceptTcpClient();


                Console.WriteLine(" Connection made");


                BackForth BF = new BackForth(连接);            


           }

       }

   }

   

    public static void SendToAll(string name,string msg){

        StreamWriter SW;

        ArrayList ToRemove = new ArrayList(0);

        N.Sockets.TcpClient [] tc = new N.Sockets.TcpClient [TalkServ.handles.Count];


        TalkServ.handles.Values.CopyTo(TC,0);

  &NBSP; &NBSP;   for(int i = 0; i< tc.Length; i ++){

  &NBSP; &NBSP; &NBSP; &NBSP;  尝试{

  &NBSP; &NBSP; &NBSP; &NBSP;   if(msg.Trim()=="" || tc [i] == null)

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;继续;

  &NBSP; &NBSP; &NBSP; &NBSP;   SW = new StreamWriter(tc [i] .GetStream());


  &NBSP; &NBSP; &NBSP; &NBSP;   SW.WriteLine(name +":" + msg);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SW.Flush();

  &NBSP; &NBSP; &NBSP; &NBSP;   SW = null;

  &NBSP; &NBSP; &NBSP; &NBSP;  } catch(例外e44){e44 = e44;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;   string g =(string)TalkServ.handleByConnect [tc [i]];


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;   TalkServ.SendSysMsg(" **" + g +" ** HAS LEFT US。");


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; TalkServ.handles.Remove(克);


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; TalkServ.handleByConnect.Remove(TC [1]);


  &NBSP; &NBSP; &NBSP; &NBSP;  }

  &NBSP; &NBSP;  }

   }
$


    public static void SendSysMsg(string msg){

  &NBSP; &NBSP;   StreamWriter SW;

  &NBSP; &NBSP;   ArrayList ToRemove = new ArrayList(0);

  &NBSP; &NBSP;   N.Sockets.TcpClient [] tc = new N.Sockets.TcpClient [TalkServ.handles.Count];


  &NBSP; &NBSP; &NBSP; TalkServ.handles.Values.CopyTo(TC,0);

  &NBSP; &NBSP;   for(int i = 0; i< tc.Length; i ++){

  &NBSP; &NBSP; &NBSP; &NBSP;  尝试{

  &NBSP; &NBSP; &NBSP; &NBSP;   if(msg.Trim()=="" || tc [i] == null)

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;继续;

  &NBSP; &NBSP; &NBSP; &NBSP;   SW = new StreamWriter(tc [i] .GetStream());


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SW.WriteLine(MSG);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SW.Flush();

  &NBSP; &NBSP; &NBSP; &NBSP;   SW = null;

  &NBSP; &NBSP; &NBSP; &NBSP;  } catch(例外e44){e44 = e44;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; TalkServ.handles.Remove(TalkServ.handleByConnect [TC [I]]);


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; TalkServ.handleByConnect.Remove(TC [1]);


  &NBSP; &NBSP; &NBSP; &NBSP;  }

  &NBSP; &NBSP;  }

   }

} //课程结束TalkServ



class BackForth {

    N.Sockets.TcpClient客户端;

    System.IO.StreamReader SR;

    System.IO.StreamWriter SW;

   字符串句柄;

  &NBSP;

    public BackForth(System.Net.Sockets.TcpClient c){

  &NBSP; &NBSP;   client = c;

  &NBSP; &NBSP;  线程t =新线程(新的ThreadStart(init));

  &NBSP; &NBSP; &NBSP; t.Start();

   }

  &NBSP;

   私人字符串GetHandle(){

  &NBSP; &NBSP;   SW.WriteLine("你的手柄是什么?");

  &NBSP; &NBSP; &NBSP; SW.Flush();

  &NBSP; &NBSP;  返回SR.ReadLine();

   }

  &NBSP;

    private void run(){

  &NBSP; &NBSP;  尝试{

  &NBSP; &NBSP;   string l ="" ;;

  &NBSP; &NBSP;   while(true){

  &NBSP; &NBSP; &NBSP; &NBSP;   l = SR.ReadLine();

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; TalkServ.SendToAll(手柄,升);

  &NBSP; &NBSP;  }

  &NBSP; &NBSP;  } catch(例外e44){Console.WriteLine(e44); }¥b $ b   }

  &NBSP;

    private void init(){

  &NBSP; &NBSP;   SR = new System.IO.StreamReader(client.GetStream());

  &NBSP; &NBSP;   SW = new System.IO.StreamWriter(client.GetStream());

  &NBSP; &NBSP;   SW.WriteLine("欢迎来到TalkServ!很好!");

  &NBSP; &NBSP;   // SW.WriteLine("你的手柄是什么?");

  &NBSP; &NBSP; &NBSP; // SW.Flush();

  &NBSP; &NBSP;   handle = GetHandle();

  &NBSP; &NBSP;   while(TalkServ.handles.Contains(handle)){

  &NBSP; &NBSP; &NBSP; &NBSP;   SW.WriteLine(" ERR - Handle already exists!");


  &NBSP; &NBSP; &NBSP; &NBSP;   handle = GetHandle();

  &NBSP; &NBSP;  }

  &NBSP; &NBSP; &NBSP; TalkServ.handles.Add(处理,客户端);

  &NBSP; &NBSP; &NBSP; TalkServ.handleByConnect.Add(客户端,手柄);

  &NBSP; &NBSP;   TalkServ.SendSysMsg(" **" + handle +" ** HAS JOINED US。");


  &NBSP; &NBSP;   SW.WriteLine(" Now Talking ..... \\\\ ----------------------------- - ");


  &NBSP; &NBSP; &NBSP; SW.Flush();

  &NBSP; &NBSP;  线程t =新线程(新的ThreadStart(运行));

  &NBSP; &NBSP; &NBSP; t.Start();

   }

 


这篇关于通过互联网赢得套接字和通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆