首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

wince6 TCP通讯

2013-09-05 
wince6 TCP通信计算机作为服务端,wince作为客户端tcp通信程序,用usb连接计算机同步的时候可以实现tcp通信,

wince6 TCP通信
计算机作为服务端,wince作为客户端tcp通信程序,用usb连接计算机同步的时候可以实现tcp通信,但是拔掉usb后tcp通信就失败了,用wince的tcp通信程序只是用网线连接计算机不用usb,然后通信就报错“试图对无法访问的计算机执行套接字操作”。这是什么原因,求解决。。。
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Net;      //TCP/IP
using System.Net.Sockets;
using System.IO;       //流读写
using System.Threading;//多线程
using System.Text.RegularExpressions;//正则表达式


namespace SmartDeviceProject9
{
    public partial class Form1 : System.Windows.Forms.Form 
    {
        /// <summary>
        /// 定义变量
        /// </summary>
        public Thread thread;
        public TcpClient tcpClient;
        public NetworkStream netStream;
        public StreamWriter streamWriter;
        public StreamReader streamReader;
        /// <summary>
        /// 构造函数
        /// </summary>
        public Form1()
        {   //初始化界面
            InitializeComponent();
           
          
        }
        /// <summary>
        /// 连接服务器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {


                Socket newclient=new Socket (AddressFamily.InterNetwork ,SocketType.Stream , ProtocolType.Tcp) ;
                tcpClient = new TcpClient("192.168.1.31", 45671);
                IPEndPoint ie = new IPEndPoint(IPAddress.Parse("192.168.1.31"),45671);
               // newclient.Bind(ie);
                //newclient.Listen(100);
                newclient.Connect(ie);
                netStream = tcpClient.GetStream();//取得网络流  
                streamWriter = new StreamWriter(netStream);//创建streamWriter,向流中写字符 
                streamReader = new StreamReader(netStream);//创建streamReader,向流中读字符            
                textBox1.Text = "连接成功";
                thread = new Thread(new ThreadStart(recieveData));//创建接收线程
                thread.Start();//启动接收线程,死循环接收数据

            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
            }


        }
        /// <summary>
        /// 断开连接
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)


        {
            try
            {
                streamReader.Close();
                streamWriter.Close();
                netStream.Close();
                tcpClient.Close();
                textBox1.Text = "连接已经断开";
            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
            }



        }
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                // string s = getData();//跨线程
                // streamWriter.Write(s);//写入流 
                streamWriter.Write(textBox1 .Text );//写入流 
                streamWriter.Flush();               //刷新当前数据流中的数据                        

            }


            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            
        }
        /// <summary>
        /// 接收数据并处理
        /// </summary>
        #region
      
        private void recieveData()
        {
            try
            {
                while (true)
                {
                    // Receive the TcpServer.response.    
                    byte[] data = new Byte[tcpClient.ReceiveBufferSize];// Buffer to store the response bytes.
                    // Receive the TcpServer.response.
                    String responseData = String.Empty;
                    // Read the first batch of the TcpServer response bytes.
                    netStream.Read(data, 0, (int)tcpClient.ReceiveBufferSize);
                    responseData = System.Text.Encoding.UTF8.GetString(data, 0, data.Length);//重编码

                    setData(responseData);//跨线程调用控件,处理数据                  



                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        
        #endregion
        
        /// <summary>
        /// 跨线程操作控件(设置)
        /// </summary>
        /// <param name="data"></param>
        #region
        private delegate void SET(string data);//要求签名相同
        public void setData(string data)
        {
            if (textBox1.InvokeRequired)       //检查控件的属性
            {
                SET ex = new SET(setData);     //创建本方法的委托实例
                textBox1.Invoke(ex, new string[] { data });   //调用控件的唤醒操作,传递相应参数 
            }
            else
            {
                textBox1.Text = data; ;     //控件操作
            }
        }
        #endregion

        private void Form1_Load(object sender, EventArgs e)
        {

        }


        /// <summary>


        /// 跨线程调用控件(获取)
        /// </summary>
        /// <returns></returns>
        #region
        private delegate string GET();      //要求签名相同
        public string getData()
        {
            string data = "";
            if (textBox1.InvokeRequired)    //检查控件的属性
            {
                GET ex = new GET(getData);    //创建本方法的委托实例
                textBox1.Invoke(ex, new string[] { });   //调用控件的唤醒操作,传递相应参数 
            }
            else
            {
                data = textBox1.Text;     //操作控件
            }
            return (data);
        }

        #endregion  
                 
        
    }
} WinCE TCP/IP
[解决办法]

引用:
说明你设备网络是不通的,连接USB时能通讯主要是因为 ACTIVE SYNC 链接电脑的网络上网的,你把电脑网络关了,再看看连着USB能不能TCP通讯


如 LS 所言,你的设备在不连接 ActiveSync 时有联网的东东吗?无线:2G/3G、WIFI 或有线,当然一般移动设备都是无线的。


[解决办法]

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

使用USB同步和wifi网络,你的wince设备和PC机的IP应该是同一个段的局域网IP。这个时候,你通信的话,可以直接采用路由分配的IP进行通讯。

但如果你使用的是2G/3G网络时,你的wince设备和PC间的网络通讯就应该是公网IP通讯,PC端的IP需要在路由映射一个端口到外网,让你的wince设备可以通过这个端口链接到你的PC端上,这样才能进行通讯
那是不是我用路由作为计算机和PDA的中间媒介,就可以实现用网络通信?


对,你如果是直接接的网线,那么把你的wince用网线接到路由那边的话,就可以组成局域网,就可以进行网络通讯。
IP就直接使用的局域网IP
是不是就只有这种方法了,直接计算机网络口接上PDA可行否?


这样的话,估计你得用交叉线才行

热点排行