当前位置:编程学习 > C#/ASP.NET >>

C#Socket编程问题

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.IO;

namespace SocketServer
{
    public partial class Form1 : Form
    {
        private Socket s;       //定义Socket对象
        private Thread th;          //客户端连接服务器线程
        public Socket cSocket;      //单个客户端连接的Socket对象
        public NetworkStream ns;  //网络流
        public StreamReader sr;   //流读取
        public StreamWriter sw;   //流写入
        private delegate void SetTextCallback();   //用于操作主线程控件

        public Form1()
        {
            InitializeComponent();
        }

        public void Communication()
        {
            while (true)
            {
                try
                {
                    cSocket = s.Accept();    //用cSocket来代表该客户端连接
                    if (cSocket.Connected)    //测试连接是否成功
                    {
                        ns = new NetworkStream(cSocket);  //建立网络流,便于数据的读取
                        sr = new StreamReader(ns);    //实例化读取流对象
                        sw = new StreamWriter(ns);    //实例化写入流对象
                        test();              //从流中读取
                        sw.WriteLine("收到请求,允许连接");  //向流中写入数据
                        sw.Flush();            //清理缓冲区
                    }
                    else
                    {
                        MessageBox.Show("连接失败");
                    }
                }
                catch (SocketException ex)
                {
                    MessageBox.Show(ex.Message);   //捕获Socket异常
                }
                catch (Exception es)
                {
                    MessageBox.Show("其他异常" + es.Message);  //捕获其他异常
                }
            }
        }

        public void send()
        {
            lbInfo.Items.Add(sr.ReadLine() + "\n");
        }

        public void test()
        {
            SetTextCallback stcb = new SetTextCallback(send);
            Invoke(stcb);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress serverIP = IPAddress.Parse("222.18.142.171");
            //IPEndPoint server = new IPEndPoint(serverIP,13);
            IPEndPoint server = new IPEndPoint(serverIP, 13);
            //s.Bind(server);
            s.Bind(server);
            s.Listen(10);
            try
            {
             th = new Thread(new ThreadStart(Communication));
             th.Start();
             label.Text = "服务器启动成功";
            }
            catch (Exception es)
            {
             MessageBox.Show("服务器启动失败"+es.Message);
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Close();
        }
    }
}

 

追问:把IPAddress serverIP = IPAddress.Parse("222.18.142.171");换成:IPAddress serverIP = IPAddress.Parse("127.0.0.1");就可以,但无法实现与本机上的另外一个“客户端”进行通信。
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,