C# 代码明明有获取到数据,为什么还会出现错误“未将对象引用设置到实例”

public TheCustomCheckDetailObj GetTheCustomCheckDetail(int TheCustomCheck)
{
using (SqlConnection con = new SqlConnection(_connectionString))
{
con.Open();
SqlCommand cmd = new SqlCommand("OGetTheCustomCheckDetail", con);
cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@TheCustomCheck", SqlDbType.Int);
            cmd.Parameters["@TheCustomCheck"].Value = TheCustomCheck;

            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                obj.CurrentCustomDetailObj.CompanyName = Convert.ToString(reader["CompanyName"]);
                obj.CurrentCustomDetailObj.CompanyPart = Convert.ToString(reader["CompanyPart"]);
                obj.CurrentCustomDetailObj.CompanyWebsite = Convert.ToString(reader["CompanyWebsite"]);
                obj.CurrentCustomDetailObj.CustomName = Convert.ToString(reader["CustomName"]);
                obj.CurrentCustomDetailObj.CustomCellphone = Convert.ToString(reader["CustomCellphone"]);
                obj.CurrentCustomDetailObj.CustomPhone = Convert.ToString(reader["CustomPhone"]);
                obj.CurrentCustomDetailObj.CustomFenji = Convert.ToString(reader["CustomFenji"]);
                obj.CurrentCustomDetailObj.QQorMSN = Convert.ToString(reader["QQorMSN"]);
                obj.CurrentCustomDetailObj.Email = Convert.ToString(reader["Email"]);
                obj.CurrentCustomDetailObj.BusinessID = Convert.ToInt32(reader["BusinessID"]);
                obj.CurrentCustomDetailObj.ProvinceID = Convert.ToInt32(reader["ProvinceID"]);
                obj.CurrentCustomDetailObj.CountryID = Convert.ToInt32(reader["CountryID"]);
                obj.CurrentCustomDetailObj.CityID = Convert.ToInt32(reader["CityID"]);
                obj.CurrentCustomDetailObj.Address = Convert.ToString(reader["Address"]);
                obj.CurrentCustomDetailObj.PS = Convert.ToString(reader["PS"]);


                obj.InCheckCustomDetailObj.CompanyName = Convert.ToString(reader["OldCompanyName"]);
                obj.InCheckCustomDetailObj.CompanyPart = Convert.ToString(reader["OldCompanyPart"]);
                obj.InCheckCustomDetailObj.CompanyWebsite = Convert.ToString(reader["OldCompanyWebsite"]);
                obj.InCheckCustomDetailObj.CustomName = Convert.ToString(reader["OldCustomName"]);
                obj.InCheckCustomDetailObj.CustomCellphone = Convert.ToString(reader["OldCustomCellphone"]);
                obj.InCheckCustomDetailObj.CustomPhone = Convert.ToString(reader["OldCustomPhone"]);
                obj.InCheckCustomDetailObj.CustomFenji = Convert.ToString(reader["OldCustomFenji"]);
                obj.InCheckCustomDetailObj.QQorMSN = Convert.ToString(reader["OldQQorMSN"]);
                obj.InCheckCustomDetailObj.Email = Convert.ToString(reader["OldEmail"]);
                obj.InCheckCustomDetailObj.BusinessID = Convert.ToInt32(reader["OldBusinessID"]);
                obj.InCheckCustomDetailObj.ProvinceID = Convert.ToInt32(reader["OldProvinceID"]);
                obj.InCheckCustomDetailObj.CountryID = Convert.ToInt32(reader["OldCountryID"]);
                obj.InCheckCustomDetailObj.CityID = Convert.ToInt32(reader["OldCityID"]);
                obj.InCheckCustomDetailObj.Address = Convert.ToString(reader["OldAddress"]);
                obj.InCheckCustomDetailObj.PS = Convert.ToString(reader["OldPS"]);


            }


            reader.Close();
            con.Close();

            return obj;

        }
    }
c#

2个回答

具体是哪一行?看看是不是哪个字段你搞错了,实际不存在。

特别是细微的拼写错误。知道出错的行,再仔细检查下。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# 代码错误,未将对象引用设置到对象的实例
private void btnSend_Click(object sender, EventArgs e) { if (cbTimeSend.Checked) { tmSend.Enabled = true; } else { tmSend.Enabled = false; } if (!sp1.IsOpen) //如果没打开 { MessageBox.Show("请先打开串口!", "Error"); return; } // string strSend = null; String strSend = txtSend.Text.ToString(); if (radio1.Checked == true) //“HEX发送” 按钮 { //处理数字转换 string sendBuf = strSend; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); tmSend.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else //以字符串形式发送时 { sp1.WriteLine(txtSend.Text); //写入数据 } } void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e) { //输出当前时间 DateTime dt = DateTime.Now; txtReceive.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n"; txtReceive.SelectAll(); txtReceive.SelectionColor = Color.Blue; //改变字体的颜色 try { byte[] receivedData = new byte[sp1.BytesToRead]; //创建接收字节数组 sp1.Read(receivedData, 0, receivedData.Length); //读取数据 if (receivedData.Length == 0) return; sp1.DiscardInBuffer(); //清空SerialPort控件的Buffer if (receivedData.Length == 3 && receivedData[0] == 0xFF && receivedData[1] == _totalBytes[1] && receivedData[2] == 0x00) { //_totalBytes[1] = Convert.ToByte(_totalBytes[1] == 0xB5 ? 0xB6 : 0xB5); _totalBytes[1] = Convert.ToByte(_totalBytes[1] == 0xB6 ? 0xB5 : 0xB6); //_size += _totalBytes[1] == 0xB5 ? 512 : 0; _size += _totalBytes[1] == 0xB6 ? 512 : 0; SendBytes(false); } else { //发送失败 } string strRcv = null; if (rdSendStr.Checked) { strRcv = sp1.Encoding.GetString(receivedData); } else { //int decNum = 0;//存储十进制 for (int i = 0; i < receivedData.Length; i++) //窗体显示 { strRcv += receivedData[i].ToString("X2"); //16进制显示 } } txtReceive.Text += strRcv + "\r\n"; } catch (System.Exception ex) { MessageBox.Show(ex.Message, "出错提示"); txtSend.Text = ""; } } ``` 串口发送一段指定的字符串,串口接收,串口收到回复消息,提示出错。未将对象引用设置到对象的实例 ``` ![图片说明](https://img-ask.csdn.net/upload/201712/05/1512440456_874167.png) ``` ``` ``` ```
安卓和C# 用TCP通信发送数据
目前在做一个程序,安卓手机每一秒钟向PC机发送若干条数据,有可能一台机器发,也有可能若干台同时发,PC机用C#接收数据。我测试了一台安卓发数据可以正常接收,可是当若干台同时发数据的时候,就出现问题了。后来我发现不知道为什么,这些安卓设备的IP地址用DHCP自动获取IP的时候IP都是一样的,我想会不会就是因为两个相同IP的机器发送数据的时候,因为后来发后数据的机器会把原先正在发送的机器建立的TCP通信链接给关掉然后自己在发送数据,现在由于实验室路由器比较特殊,我没有权限改成静态获取,所以在此问一下是不是因为这个原因出的错,下面列出代码,麻烦大家帮忙看一看,出错的地方我用注释标记出来了 安卓端发送数据代码 ``` public void sendToPC(String data){ try { s =new Socket("192.168.0.104",8730); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } DataOutputStream dout=null; try { dout =new DataOutputStream(s.getOutputStream()); Thread.sleep(50, 0); dout.writeBytes(data); dout.flush(); }catch(Exception e){ } } ``` C#段代码 ``` private void listenConnect() { while (true) { tcpClient = myListener.AcceptTcpClient(); //获取网络流 User user = new User(tcpClient); Thread receiveThread = new Thread(receiveData); receiveThread.IsBackground = true; receiveThread.Start(user); } } string receiveString = ""; public void receiveData(object u) { User user = (User)u; NetworkStream netStream1 = user.client.GetStream(); while(true){ byte[] myReadBuffer = new Byte[1024]; int numberOfBytesRead = 0; StringBuilder myCompleteMessage = new StringBuilder(); int nodeId = 0; do { numberOfBytesRead = netStream1.Read(myReadBuffer, 0, myReadBuffer.Length);//出错总是在这一句,提示错误“远程主机主动关闭现有连接” myCompleteMessage.AppendFormat("{0}", Encoding.UTF8.GetString(myReadBuffer, 0, numberOfBytesRead)); } while (netStream1.DataAvailable); receiveString = myCompleteMessage.ToString(); string[] receivearr = receiveString.Split('!'); for (int i = 0; i < receivearr.Length-1;i++ ) { string[] infoarr = receivearr[i].Split('#'); DoWork(infoarr[1], infoarr[0]); } } } } ```
C#调用存储过程,获取异常信息问题
C#的代码如下: try { //调用存储过程 cmd.ExecuteNonQuery(); strErr = cmd.Parameters["@ErrMsg"].value.tostring();//strErr 是存储过程的输出参数 } catch(Exception e) ( strErr = e.Message.ToString(); return; ) 测试情况:我通过存储过程往数据库中插入一条重复的记录(已设置主键),调试存储过程时,输出参数strErr的错误消息大概为违反表的主键唯一性约束;但是在C#调试,执行ExecuteNonQuery()后,就跳入catch语句中,strErr的错误消息为Error converting data type nvarchar to int.为什么错误不一样呢?谁能帮我解释下原因,折腾了好几天???
c# dataGridView1 点击获取内容 点击标题栏出来超出索引错误
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { button2.Enabled = true; Sheet_id= this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); sn.Text = this.dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); brand.Text = this.dataGridView1.SelectedRows[0].Cells[2].Value.ToString(); model.Text = this.dataGridView1.SelectedRows[0].Cells[3].Value.ToString(); num.Text = this.dataGridView1.SelectedRows[0].Cells[5].Value.ToString(); colour.Text = this.dataGridView1.SelectedRows[0].Cells[4].Value.ToString(); describe.Text = this.dataGridView1.SelectedRows[0].Cells[6].Value.ToString(); ``` 代码如上 我目的是要点击datagridview 控件获取每一行的第一列数据 但是发现一个问题就是 读取数据库后 dategridview 有了数据 还有一行标题栏 点击标题直接报错 System.ArgumentOutOfRangeException:“索引超出范围。必须为非负值并小于集合大小。 Arg_ParamName_Name” 点击数据没有问题 点击标题栏就是这 请问什么原因呢 还有有什么优化的代码吗 可以实现这个功能
c#异步通信代码错误问题
public void ConnectCallback(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; client.EndConnect(ar); bool connect_flag = false; connect_flag = true; ManualResetEvent connectDone = new ManualResetEvent(false); //连接的信号 connectDone.Set(); } //vs的这段代码中 ,bool connect_flag的connect_flag报了一个警告错误,变量connect_flag已赋值,但是其值从未使用过。如何修改? public static MODEL.DataSourceVersionQuery BrowseDataSource_QueryVersionData() { MODEL.DataSourceVersionQuery result = new MODEL.DataSourceVersionQuery(); //获取数据包 string strPacket = BrowseDataSource_PrepareVersionPacket(); //向服务端提交查询版本信息 string str = DAL.socket.GetSocketData(strPacket); //DAL.socket.GetSocketData(strPacket) vs报了一个错误,非静态字段、方法或属性DAL.socket.GetSocketData(string)“要求对象引用。如何修改? 还有这个错误![图片说明](https://img-ask.csdn.net/upload/201509/16/1442412249_893824.png) 另外我想把DAL中的socket.cs的 public byte[] bytesReceived { get; set; }这段移动到Model中而不报错要如何修改? DAL中socket完整代码如下: using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.ComponentModel; using System.Data; using System.Windows.Forms; using System.Threading; namespace DAL { /// <summary> /// Socket接口 /// </summary> class socket { //Socket public Socket clientSocket; /// <summary> /// socket连接 /// </summary> /// <returns> /// true 成功 /// false 失败 /// </returns> public bool SocketConnect() { byte[] bytesReceived = new byte[256]; ManualResetEvent connectDone = new ManualResetEvent(false); //连接的信号 ManualResetEvent sendDone = new ManualResetEvent(false); //发送结束 //从配置文件获取IP string SocketIP = DAL.Common.ReadConfigString("Recover", "IP"); //从配置文件获取端口 int SocketPort = Convert.ToInt32(DAL.Common.ReadConfigString("Recover", "Port")); //创建IP地址 IPAddress IP = IPAddress.Parse(SocketIP); try { //创建socket实例 clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建网络端点 IPEndPoint ipEnd = new IPEndPoint(IP, SocketPort); //与目标终端连接 clientSocket.BeginConnect(ipEnd, new AsyncCallback(ConnectCallback), clientSocket);//调用回调函数 connectDone.WaitOne(); if (clientSocket.Connected) { return true; } else { return false; } } catch (Exception e) { string strError = ""; strError += "\r\n SocketIP = " + SocketIP.ToString(); strError += "\r\n SocketPort = " + SocketPort.ToString(); DAL.Common.WriteErrorLog(e, strError); return false; } } /// <summary> /// 异步连接的回调函数 /// </summary> /// <param name="ar"></param> public void ConnectCallback(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; client.EndConnect(ar); bool connect_flag = false; connect_flag = true; ManualResetEvent connectDone = new ManualResetEvent(false); //连接的信号 connectDone.Set(); } /// <summary> /// Socket发送数据 /// </summary> /// <param name="strSend"> /// 数据的内容 /// </param> public void SocketSend(string strSend) { Socket clientSocket; //发送创建套接字 int length = strSend.Length; Byte[] bytesSent = new byte[length]; clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { bytesSent = System.Text.Encoding.Default.GetBytes(strSend); //将字符串指定到指定Byte数组 clientSocket.BeginSend(bytesSent, 0, bytesSent.Length, 0, new AsyncCallback(SendCallback), clientSocket); //异步发送数据 ManualResetEvent sendDone = new ManualResetEvent(false);//发送结束 sendDone.WaitOne(); } catch (Exception e) { string strError = ""; DAL.Common.WriteErrorLog(e, strError); } } public void SendCallback(IAsyncResult ar) //发送的回调函数 { ManualResetEvent sendDone = new ManualResetEvent(false); //发送结束 Socket client = (Socket)ar.AsyncState; int bytesSend = client.EndSend(ar); //完成发送 sendDone.Set(); } /// <summary> /// Socket接收数据 /// </summary> /// <returns> /// 收到的数据 /// </returns> public string SocketReceive() { string result = ""; try { MemoryStream stream = new MemoryStream(); Byte[] bytesReceived = new Byte[256]; clientSocket.BeginReceive(bytesReceived, 0, bytesReceived.Length, 0, new AsyncCallback(ReceiveCallback), clientSocket); ManualResetEvent sendDone = new ManualResetEvent(false); //发送结束 sendDone.WaitOne(); } catch (Exception e) { string strError = ""; DAL.Common.WriteErrorLog(e, strError); } return result; } public void ReceiveCallback(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; //获取句柄 int bytesread = client.EndReceive(ar); if (bytesread > 0) { clientSocket.BeginReceive(bytesReceived, 0, bytesReceived.Length, 0, new AsyncCallback(ReceiveCallback), client); string content = Encoding.ASCII.GetString(bytesReceived, 0, bytesReceived.Length); } else { ManualResetEvent readDone = new ManualResetEvent(false); //读信号 readDone.Set(); } } /// <summary> /// Socket通信 /// </summary> /// <param name="strSend"> /// 发送的信息 /// </param> /// <returns> /// 包体的内容 /// </returns> public string GetSocketData(string strSend) { string strDatas = ""; string strResult = ""; string strExtLength = ""; try { //Socket连接 SocketConnect(); //发送信息 SocketSend(strSend); //接收服务器的信息 strResult = SocketReceive(); //获取扩展信息的长度 strExtLength = strResult.Substring(16, 12); int ExtLength = Convert.ToInt32(strExtLength); //扩展信息,暂不使用 //string strExtInfo = strResult.Substring(32, ExtLength); //获取包体的内容 strDatas = strResult.Substring(ExtLength + 32); //strDatas = decodedString; } catch (Exception e) { string strError = ""; strError += "\r\n strResult = " + strResult; strError += "\r\n strExtLength = " + strExtLength; DAL.Common.WriteErrorLog(e, strError); strDatas = ""; } return strDatas; } public string SocketReceiveFile(string FileName) { string result = ""; try { MemoryStream streamPacketLength = new MemoryStream(); Byte[] bytesPacketLength = new Byte[16]; clientSocket.Receive(bytesPacketLength, bytesPacketLength.Length, 0); streamPacketLength.Write(bytesPacketLength, 0, bytesPacketLength.Length); result = System.Text.Encoding.Default.GetString(streamPacketLength.ToArray()); int PacketLength = Convert.ToInt32(result); streamPacketLength.Close(); MemoryStream streamExtLength = new MemoryStream(); Byte[] bytesExtLength = new Byte[12]; clientSocket.Receive(bytesExtLength, bytesExtLength.Length, 0); streamExtLength.Write(bytesExtLength, 0, bytesExtLength.Length); result = System.Text.Encoding.Default.GetString(streamExtLength.ToArray()); int ExtLength = Convert.ToInt32(result); streamExtLength.Close(); MemoryStream streamProtocol = new MemoryStream(); Byte[] bytesProtocol = new Byte[4]; clientSocket.Receive(bytesProtocol, bytesProtocol.Length, 0); streamProtocol.Write(bytesProtocol, 0, bytesProtocol.Length); result = System.Text.Encoding.Default.GetString(streamProtocol.ToArray()); string Protocol = result; streamProtocol.Close(); MemoryStream streamExtInfo = new MemoryStream(); Byte[] bytesExtInfo = new Byte[ExtLength]; clientSocket.Receive(bytesExtInfo, bytesExtInfo.Length, 0); streamExtInfo.Write(bytesExtInfo, 0, bytesExtInfo.Length); result = System.Text.Encoding.Default.GetString(streamExtInfo.ToArray()); byte[] Buffer = Convert.FromBase64String(result); string strExtInfo = UTF8Encoding.UTF8.GetString(Buffer); streamExtInfo.Close(); MODEL.FileTrackQuery ExtInfo = new MODEL.FileTrackQuery(); ExtInfo = JsonConvert.DeserializeObject<MODEL.FileTrackQuery>(strExtInfo); if (ExtInfo.code == "00") { FileInfo fi = new FileInfo(FileName); DirectoryInfo di = fi.Directory; if (!di.Exists) { di.Create(); } FileStream streamPacketInfo = new FileStream(FileName, FileMode.Create); if (PacketLength > 0) { Byte[] bytesPacketInfo = new Byte[PacketLength]; int bytes = 0; do { bytes = clientSocket.Receive(bytesPacketInfo, bytesPacketInfo.Length, 0); streamPacketInfo.Write(bytesPacketInfo, 0, bytes); } while (bytes > 0); } streamPacketInfo.Close(); } clientSocket.Close(); string strLogFile = System.AppDomain.CurrentDomain.BaseDirectory + "debug.txt"; StreamWriter sw = new StreamWriter(strLogFile, true); sw.WriteLine("PacketLength : " + PacketLength.ToString()); sw.WriteLine("ExtLength : " + ExtLength.ToString()); sw.WriteLine("strExtInfo : " + strExtInfo); sw.WriteLine("ExtInfo.code : " + ExtInfo.code); sw.WriteLine("\n------------------------------------------------------------------------\n"); sw.Flush(); sw.Close(); } catch (Exception e) { string strError = ""; DAL.Common.WriteErrorLog(e, strError); } return result; } public string GetSocketFile(string strSend, string FileName) { string strDatas = ""; string strResult = ""; string strExtLength = ""; try { //Socket连接 SocketConnect(); //发送信息 SocketSend(strSend); //接收服务器的信息 strResult = SocketReceiveFile(FileName); //获取扩展信息的长度 //strExtLength = strResult.Substring(16, 12); //int ExtLength = Convert.ToInt32(strExtLength); //扩展信息,暂不使用 //string strExtInfo = strResult.Substring(32, ExtLength); //获取包体的内容 //strDatas = strResult.Substring(ExtLength + 32); } catch (Exception e) { string strError = ""; strError += "\r\n strResult = " + strResult; strError += "\r\n strExtLength = " + strExtLength; DAL.Common.WriteErrorLog(e, strError); strDatas = ""; } return strDatas; } public byte[] bytesReceived { get; set; } } } MODEL完整代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MODEL { public enum ClientEditionEnum { Enterprise,//企业版 Personal,//个人版 Internal,//内部版 None,//error } /// <summary> /// 授权文件内容 /// </summary> public class AuthorizeFileInfo { public string startTime { get; set; } public string expiryTime { get; set; } public string licenseID { get; set; } public string licensePassword { get; set; } public string terminalID { get; set; } public string customName { get; set; } public string customID { get; set; } public AuthorizeFileInfo() { startTime = ""; expiryTime = ""; licenseID = ""; licensePassword = ""; terminalID = ""; customName = ""; customID = ""; } } /// <summary> /// 通用返回值 /// </summary> /// public class CommonResult { public string code { get; set; } public string message { get; set; } public CommonResult() { code = ""; message = ""; } } public class EnterpriseConfirmAuthorizeDatas { public string sessionID { get; set; } public EnterpriseConfirmAuthorizeDatas() { sessionID = ""; } } /// <summary> /// 企业版授权校验接口 /// </summary> public class EnterpriseConfirmAuthorizeResult { public string code { get; set; } public string message { get; set; } public EnterpriseConfirmAuthorizeDatas datas { get; set; } public EnterpriseConfirmAuthorizeResult() { code = ""; message = ""; datas = new EnterpriseConfirmAuthorizeDatas(); } } public class PersonalConfirmAuthorizeDatas { public string sessionID { get; set; } public string licenseInfo { get; set; } public PersonalConfirmAuthorizeDatas() { sessionID = ""; licenseInfo = ""; } } /// <summary> /// 个人版授权校验接口 /// </summary> public class PersonalConfirmAuthorizeResult { public string code { get; set; } public string message { get; set; } public PersonalConfirmAuthorizeDatas datas { get; set; } public PersonalConfirmAuthorizeResult() { code = ""; message = ""; datas = new PersonalConfirmAuthorizeDatas(); } } /// <summary> /// 鉴权信息,每次调用安全接口时使用 /// </summary> public class LicInfo { public string licenseID { get; set; } public string licensePassword { get; set; } public string terminalID { get; set; } public string deviceID { get; set; } public string sessionID { get; set; } public LicInfo() { licenseID = ""; licensePassword = ""; terminalID = ""; deviceID = ""; sessionID = ""; } } /// <summary> /// java引擎的参数 /// </summary> public class JavaEngineArg { public string licenseID { get; set; } public string licensePassword { get; set; } public string terminalID { get; set; } public string customName { get; set; } public string customID { get; set; } public string deviceID { get; set; } public JavaEngineArg() { licenseID = ""; licensePassword = ""; terminalID = ""; customName = ""; customID = ""; deviceID = ""; } } /// <summary> /// 用户登录接口(一),非安全接口 /// </summary> /// public class UserInfoUnSafe { public string userID { get; set; } public string userName { get; set; } public string departmentName { get; set; } public UserInfoUnSafe() { userID = ""; userName = ""; departmentName = ""; } } public class UserLoginUnSafe { public string code { get; set; } public string message { get; set; } public UserInfoUnSafe datas { get; set; } public UserLoginUnSafe() { code = ""; message = ""; datas = new UserInfoUnSafe(); } } /// <summary> /// 个人版用户登录接口,非安全接口 /// </summary> /// public class UserInfoForPersonal { public string userID { get; set; } public string userName { get; set; } public string departmentName { get; set; } public string licenseInfo { get; set; } public UserInfoForPersonal() { userID = ""; userName = ""; departmentName = ""; licenseInfo = ""; } } public class UserLoginForPersonal { public string code { get; set; } public string message { get; set; } public UserInfoForPersonal datas { get; set; } public UserLoginForPersonal() { code = ""; message = ""; datas = new UserInfoForPersonal(); } } /// <summary> /// 用户登录接口(二),安全接口 /// </summary> /// public class UserInfoSafe { public string userSessionID { get; set; } public string userID { get; set; } public string userName { get; set; } public string departmentName { get; set; } public string activeTime { get; set; } public UserInfoSafe() { userSessionID = ""; userID = ""; userName = ""; departmentName = ""; activeTime = ""; } } public class UserLoginSafe { public string code { get; set; } public string message { get; set; } public UserInfoSafe datas { get; set; } public UserLoginSafe() { code = ""; message = ""; datas = new UserInfoSafe(); } } /// <summary> /// 更新检查接口 /// </summary> /// public class SingleVersion { public string softID { get; set; } public int version { get; set; } public SingleVersion() { softID = ""; version = new int(); } } public class Versions { public List<SingleVersion> versions { get; set; } public Versions() { versions = new List<SingleVersion>(); } } public class VersionUpdate { public string softID { get; set; } public int version { get; set; } public string url { get; set; } public VersionUpdate() { softID = ""; version = new int(); url = ""; } } public class VersionCheck { public string code { get; set; } public string message { get; set; } public List<VersionUpdate> datas { get; set; } public VersionCheck() { code = ""; message = ""; datas = new List<VersionUpdate>(); } } /// <summary> /// 数据源信息查询接口 /// </summary> /// public class OptInfoQuery { public string createUserID { get; set; } public string createUserName { get; set; } public string createUserTime { get; set; } public OptInfoQuery() { createUserID = ""; createUserName = ""; createUserTime = ""; } } public class Period { public int cycle { get; set; } public int cycleUnit { get; set; } public string timer { get; set; } public Period() { cycle = 1; cycleUnit = 1; timer = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); } } public class StrategyConfig { public int backType { get; set; } public int taskType { get; set; } public Period config { get; set; } public StrategyConfig() { backType = 0; taskType = 1; config = new Period(); } } public class FilterFileSuffix { public string suffix { get; set; } public FilterFileSuffix() { suffix = ""; } } public class Scan { public int scanType { get; set; } public string root { get; set; } public bool scanHideFile { get; set; } public string verifyCompleteName { get; set; } public int verifyCompleteMaxCount { get; set; } public int verifyCompleteTimer { get; set; } public string fileAttrGainer { get; set; } public bool recordCanNotReadFileInfo { get; set; } public bool recordEmptyDirectory { get; set; } public bool recordEmptyFile { get; set; } public List<FilterFileSuffix> filterFileSuffix { get; set; } public Scan() { scanType = 2; root = ""; scanHideFile = false; verifyCompleteName = ""; verifyCompleteMaxCount = 5; verifyCompleteTimer = 10000; fileAttrGainer = "null"; recordCanNotReadFileInfo = false; recordEmptyDirectory = false; recordEmptyFile = false; filterFileSuffix = new List<FilterFileSuffix>(); } } public class DataSourceConfigQuery { public int status { get; set; } public int dataSourceType { get; set; } public string dataSourceID { get; set; } public string dataSourceName { get; set; } public string dataSourceDescription { get; set; } public Scan config { get; set; } public DataSourceConfigQuery() { status = 0; dataSourceType = 0; dataSourceID = ""; dataSourceName = ""; dataSourceDescription = ""; config = new Scan(); } } public class DatasQuery { public OptInfoQuery optInfo { get; set; } public StrategyConfig strategyConfig { get; set; } public DataSourceConfigQuery dataSourceConfig { get; set; } public DatasQuery() { optInfo = new OptInfoQuery(); strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigQuery(); } } public class DataSourceInfoQuery { public string code { get; set; } public string message { get; set; } public List<DatasQuery> datas { get; set; } public DataSourceInfoQuery() { code = ""; message = ""; datas = new List<DatasQuery>(); } } public class WebSite { public string ExpirationTime { get; set; } public string WebSiteSpace { get; set; } public bool DataBaseEnable { get; set; } public string DataBaseUserName { get; set; } public string DataBasePassword { get; set; } public string DataBaseMark { get; set; } public string WebSiteAdmin { get; set; } public string WebSitePassword { get; set; } public WebSite() { ExpirationTime = ""; WebSiteSpace = ""; DataBaseEnable = false; DataBaseUserName = ""; DataBasePassword = ""; DataBaseMark = ""; WebSiteAdmin = ""; WebSitePassword = ""; } } public class WebSiteDatasQuery { public OptInfoQuery optInfo { get; set; } public StrategyConfig strategyConfig { get; set; } public DataSourceConfigQuery dataSourceConfig { get; set; } public WebSite webSiteConfig { get; set; } public WebSiteDatasQuery() { optInfo = new OptInfoQuery(); strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigQuery(); webSiteConfig = new WebSite(); } } public class WebSiteDataSourceInfoQuery { public string code { get; set; } public string message { get; set; } public List<WebSiteDatasQuery> datas { get; set; } public WebSiteDataSourceInfoQuery() { code = ""; message = ""; datas = new List<WebSiteDatasQuery>(); } } /// <summary> /// 新增数据源接口 /// </summary> /// public class OptInfoNew { public bool forceFlag { get; set; } public OptInfoNew() { forceFlag = true; } } public class DataSourceConfigNew { public int dataSourceType { get; set; } public string dataSourceName { get; set; } public string dataSourceDescription { get; set; } public Scan config { get; set; } public DataSourceConfigNew() { dataSourceType = 0; dataSourceName = ""; dataSourceDescription = ""; config = new Scan(); } } public class DataSourceNew { public OptInfoNew optInfo { get; set; } public StrategyConfig strategyConfig { get; set; } public DataSourceConfigNew dataSourceConfig { get; set; } public DataSourceNew() { optInfo = new OptInfoNew(); strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigNew(); } } /// <summary> /// 修改数据源接口 /// </summary> /// public class DataSourceModify { public StrategyConfig strategyConfig { get; set; } public DataSourceConfigQuery dataSourceConfig { get; set; } public DataSourceModify() { strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigQuery(); } } /// <summary> /// 停用/启用数据源接口 /// </summary> /// public class DataSourceStatus { public string dataSourceID { get; set; } public int optType { get; set; } public DataSourceStatus() { dataSourceID = ""; optType = new int(); } } /// <summary> /// 数据源数据,仅用于存放数据 /// </summary> /// public class DataSourceData { public List<DatasQuery> datas { get; set; } public DataSourceData() { datas = new List<DatasQuery>(); } } /// <summary> /// WebSite数据源数据,仅用于存放数据 /// </summary> /// public class WebSiteDataSourceData { public List<WebSiteDatasQuery> datas { get; set; } public WebSiteDataSourceData() { datas = new List<WebSiteDatasQuery>(); } } /// <summary> /// 文件恢复,版本查询 /// </summary> /// public class DataSourceVersionArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 前置机编号 public string terminalId { get; set; } // 操作用户编号 public string optUserID { get; set; } public DataSourceVersionArg() { secretKey = ""; token = ""; terminalId = ""; optUserID = ""; } } public class FileVersions { public int file_count { get; set; } public long space_size { get; set; } public string task_id { get; set; } public string task_time { get; set; } public int total_count { get; set; } public string version { get; set; } public FileVersions() { file_count = new int(); space_size = new long(); task_id = ""; task_time = ""; total_count = new int(); version = ""; } } public class DataSourceVersion { public Scan datasourceConfig { get; set; } public string datasourceId { get; set; } public string datasourceName { get; set; } public int datasourceStatus { get; set; } public int datasourceType { get; set; } public List<FileVersions> versions { get; set; } public DataSourceVersion() { datasourceConfig = new Scan(); datasourceId = ""; datasourceName = ""; datasourceStatus = new int(); datasourceType = new int(); versions = new List<FileVersions>(); } } /// <summary> /// 查询数据源接口 /// </summary> public class DataSourceVersionQuery { public string code { get; set; } public string message { get; set; } public List<DataSourceVersion> datas { get; set; } public DataSourceVersionQuery() { code = ""; message = ""; datas = new List<DataSourceVersion>(); } } /// <summary> /// 数据源版本信息 /// </summary> public class DataSourceVersionDatas { public List<DataSourceVersion> datas { get; set; } public DataSourceVersionDatas() { datas = new List<DataSourceVersion>(); } } /// <summary> /// 文件恢复,文件信息查询 /// </summary> /// public class QueryFileInfoArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 数据源编号 public string datasourceId { get; set; } // 操作用户编号 public string optUserID { get; set; } // 目录文件编号--如果为根目录使用 DS_ROOT public string fileID { get; set; } // 查询的版本编号 如果是综合分析 这个字段设置为 ALL public string taskID { get; set; } public QueryFileInfoArg() { secretKey = ""; token = ""; datasourceId = ""; optUserID = ""; fileID = ""; taskID = ""; } } public class FileInfoCondition { public string datasourceId { get; set; } public string parentId { get; set; } public string taskID { get; set; } public FileInfoCondition() { datasourceId = ""; parentId = ""; taskID = ""; } } public class FileInfo { // 文件唯一编号 public string file_id { get; set; } // 源相对目录 public string file_src_path { get; set; } // 文件名 public string file_name { get; set; } // 文件后缀 public string file_suffix { get; set; } // 是否为文件 public bool is_file { get; set; } // 上级文件编号 public string parent_id { get; set; } // 是否删除 public bool is_del { get; set; } // 是否隐藏 public bool is_hide { get; set; } // 文件大小 public int size { get; set; } // 文件创建时间 public string create_time { get; set; } // 文件创建人 public string create_user { get; set; } // 文件最后修改时间 public string lm_time { get; set; } // 文件最后修改人 public string lm_user { get; set; } // 是否可读 public bool can_read { get; set; } public FileInfo() { file_id = ""; file_src_path = ""; file_name = ""; file_suffix = ""; is_file = new bool(); parent_id = ""; is_del = new bool(); is_hide = new bool(); size = new int(); create_time = ""; create_user = ""; lm_time = ""; lm_user = ""; can_read = new bool(); } } public class FileInfoAndCondition { public FileInfoCondition condition { get; set; } public List<FileInfo> fileInfos { get; set; } public FileInfoAndCondition() { condition = new FileInfoCondition(); fileInfos = new List<FileInfo>(); } } /// <summary> /// 查询文件信息接口 /// </summary> public class FileInfoQuery { public string code { get; set; } public string message { get; set; } public FileInfoAndCondition datas { get; set; } public FileInfoQuery() { code = ""; message = ""; datas = new FileInfoAndCondition(); } } /// <summary> /// 文件信息 /// </summary> public class FileInfoData { public List<FileInfo> datas { get; set; } public FileInfoData() { datas = new List<FileInfo>(); } } public class QueryFileTrackArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 文件编号 public string fileID { get; set; } // 操作用户编号 public string optUserID { get; set; } // 查询的版本编号 public string taskID { get; set; } public QueryFileTrackArg() { secretKey = ""; token = ""; fileID = ""; optUserID = ""; taskID = ""; } } public class FileTrack { // 文件操作 public string act_cmd { get; set; } // 是否可读 public bool can_read { get; set; } // 文件创建时间 public string create_time { get; set; } // 文件创建人 public string create_user { get; set; } // 是否删除 public bool is_del { get; set; } // 是否隐藏 public bool is_hide { get; set; } // 文件最后修改时间 public string lm_time { get; set; } // 文件最后修改人 public string lm_user { get; set; } // 文件大小 public int size { get; set; } public string taskID { get; set; } public FileTrack() { act_cmd = ""; can_read = new bool(); create_time = ""; create_user = ""; is_del = new bool(); is_hide = new bool(); lm_time = ""; lm_user = ""; size = new int(); taskID = ""; } } public class FileTrackCondition { public string fileID { get; set; } public string taskID { get; set; } public FileTrackCondition() { fileID = ""; taskID = ""; } } /// <summary> /// 查询文件轨迹接口 /// </summary> public class FileTrackQuery { public string code { get; set; } public string message { get; set; } public FileTrackCondition condition { get; set; } public List<FileTrack> datas { get; set; } public FileTrackQuery() { code = ""; message = ""; condition = new FileTrackCondition(); datas = new List<FileTrack>(); } } /// <summary> /// 文件轨迹 /// </summary> public class FileTrackData { public List<FileTrack> datas { get; set; } public FileTrackData() { datas = new List<FileTrack>(); } } /// <summary> /// 字典item /// </summary> public class DictionaryData { public string version { get; set; } public string task_time { get; set; } public DictionaryData() { version = ""; task_time = ""; } } public class FileRecoverArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 操作用户编号 public string optUserID { get; set; } public string fileID { get; set; } public string taskID { get; set; } public string password { get; set; } public FileRecoverArg() { secretKey = ""; token = ""; optUserID = ""; fileID = ""; taskID = ""; password = ""; } } }
逆序数据建立链表--按输入数据的逆序建立一个链表
要求实现一个函数,按输入数据的逆序建立一个链表 函数createlist利用scanf从输入中获取一系列正整数,当读到−1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。 题目给出的代码: ``` #include <stdio.h> #include <stdlib.h> struct ListNode { int data; struct ListNode *next; }; struct ListNode *createlist(); int main() { struct ListNode *p, *head = NULL; head = createlist(); for ( p = head; p != NULL; p = p->next ) printf("%d ", p->data); printf("\n"); return 0; } ``` 正确答案代码: ``` /* 你的代码将被嵌在这里 */ struct ListNode *createlist(){ int num; struct ListNode *p=NULL,*head=NULL; scanf("%d",&num); while (num!=-1) { p=(struct ListNode*)malloc(sizeof(struct ListNode));//注意这里!!! p->data=num; p->next=head; head=p; scanf("%d",&num); } return head; } ``` 输出结果: ``` 6 5 -1 5 6 Program ended with exit code: 0 ``` 错误代码(将上述标注的代码行换了个位置): ``` struct ListNode *createlist(){ int num; struct ListNode *p=NULL,*head=NULL; scanf("%d",&num); p=(struct ListNode*)malloc(sizeof(struct ListNode));//换到while循环外面!! while (num!=-1) { p->data=num; p->next=head; head=p; scanf("%d",&num); } return head; } ``` 输出结果: ``` 6 5 -1 5 5 5 5 5 5 5 5 5 5 5 …… ``` 为什么会这样呢?
C# Webservice剪贴板操作发布问题
用C#写了个webservice函数,用于将word文档中某一段数据转换成png图片,但发现在开发测试的时候一切正常,但是发布后却转不成功,IsClipboardFormatAvailable这个函数老是失败,但是在开发服务器上是成功的,转换的代码如下所示: //Microsoft.Office.Interop.Word.Range rRange rRange.CopyAsPicture();//复制图片到剪贴板 if (!OpenClipboard(null)) { return ; } if (IsClipboardFormatAvailable((uint)ClipboardFormats.CF_ENHMETAFILE)) {//判断剪贴板数据格式是否有效,有效则获取剪贴板数据 IntPtr hEmfClp = GetClipboardData((uint)ClipboardFormats.CF_ENHMETAFILE); if (IntPtr.Zero != hEmfClp) {//获取成功,拷贝指定格式的数据 IntPtr hEmfCopy = CopyEnhMetaFile(hEmfClp, null); if (IntPtr.Zero != hEmfCopy) { using (Metafile metafile = new Metafile(hEmfCopy, true)) { metafile.Save(fileName, ImageFormat.Png); } } else { System.UInt32 uLastError = GetLastError(); throw new InvalidOperationException("转换图片失败1,错误代码:" + uLastError.ToString()); } } else { System.UInt32 uLastError = GetLastError(); throw new InvalidOperationException("转换图片失败2,错误代码:" + uLastError.ToString()); } } else { System.UInt32 uLastError = GetLastError(); throw new InvalidOperationException("转换图片失败3,错误代码:" + uLastError.ToString()); } CloseClipboard();
sql C# 数据怎么就窜了
# 问题 func1 有query1, func2 有query2 执行顺序是 func1->func2 ,现在的问题是func2里面的query2 拿到的是 func1的query1 的查询结果 ,数据串了! **问题出现的时间点**:每天早上,第一个用户访问系统的时候,而且出现了这个问题之后就会 一直有这个问题,要么覆盖bin或者修改配置文件之后才能恢复正常访问 **服务器及数据库配置**:阿里云主机,iis 服务器,数据库 sql server 2012 **服务器应用部署方式**:多个站点,每个站点都是用同一套系统,只是分开部署,db是部署在db服务器,并不是跟应用服务部署在一起, **出现问题的地方**:出现在微信公众号用户网页验证的回调接口,简单的说:就是获取用户的在当前公众号下的openId ## 代码 ///func1 protected OA_WeixinOauthTokenEntity Get_token(string Code, string SchoolCode) { var weixinAccount = new WeixinUserService().GetWeixinAccount(SchoolCode);//query1 if (weixinAccount == null) { return null; } else { var AppID = weixinAccount.WechatAppid; var AppSecret = weixinAccount.WechatAppsecret; var urlStr = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + AppID + "&secret=" + AppSecret + "&code=" + Code + "&grant_type=authorization_code"; var helper = new HttpHelper(urlStr); var strJson = helper.SendHttpRequst(); var Oauth_Token_Model = JsonOperate.FromJson<OA_WeixinOauthTokenEntity>(strJson); return Oauth_Token_Model; } } ///func2 public string CheckIsAuthen(string OpenID, string UserType) { var strUserID = ""; if (!"".Equals(OpenID)) { //1. 老师,2学生,3家长 var strTable = "PIUser"; if (UserType == "2") strTable = "PIStudent"; if (UserType == "3") strTable = "PIParent"; var sql = " SELECT UserID FROM " + strTable + ",OA_WeixinToUser WHERE " + strTable + ".ID = UserID AND OA_WeixinToUser.OpenID= '" + OpenID + "' And OA_WeixinToUser.UserType = " + UserType + " And DELETEMARK=0 And ENABLED=1"; Const.WriteJobTxt("sql:" + sql, "CheckIsAuthen_v2"); DataSet ds = DbHelperSQL.Query(sql);//query2 DataTable dt = ds.Tables[0]; if (dt.Rows.Count > 0) { try { Const.WriteJobTxt("ds.count=" + ds.Tables.Count + "|dt:" + JSONhelper.ToJson(ds), "CheckIsAuthen_v2"); strUserID = PublicMethod.ObjectToStr(dt.Rows[0]["UserID"]); } catch (Exception ex) { Const.WriteBugLog(ex); throw ex; } } } return strUserID; } ``` ``` ## 日志文件 ![图片说明](https://img-ask.csdn.net/upload/201709/28/1506572703_987447.png) ## 错误提示 ![图片说明](https://img-ask.csdn.net/upload/201709/28/1506572806_176839.jpg) ## 尝试解决 1,初步猜测是并发导致的,但是经过分析日志文件,觉得不太可能,同一时间段访问量并不大,而且,时间间隔也是到3 ,4秒以上 2,数据库帮助类的query 使用的静态方法,后来把全部静态方法修改了之后还是会出现这个问题。所以排除这个问题 现在还是没有找到问题的解决方案,如果有某位大神看到这篇文章,并有遇到相似的问题。不妨讨论讨论,如果有解决方案那就更好不过了
C#连接数据库实现登陆,现在连接不上数据库,请各位大佬指点一下代码哪有问题
namespace _日记本 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") MessageBox.Show("用户名不能为空!", "提示"); else if (textBox2.Text == "") MessageBox.Show("密码不能为空!", "提示"); try //try...catch...异常处理语句 { string name, pass; bool flag = false; name = textBox1.Text; pass = textBox2.Text; //获取用户名,密码 string str = Properties.Settings.Default.Database1ConnectionString;//连接字符串 SqlConnection Conn = new SqlConnection(str);//建立到数据库的连接 Conn.Open(); //将连接打开 //SQL语句:从数据库的登录表中搜索登录名,密码 string sqlstring = "select * from dbo.Table where Id ='" + name + "'and Password ='" + pass + "'"; //执行con对象的函数,返回一个SqlCommand类型的对象 SqlCommand command = new SqlCommand(sqlstring, Conn); //用cmd的函数执行语句,返回SqlDataReader对象thisReader,thisReader就是返回的结果集(也就是数据库中查询到的表数据) SqlDataReader thisReader = command.ExecuteReader(); //判断用户名及密码是否正确,对flag进行赋值 while (thisReader.Read()) { if ((thisReader.GetValue(0).ToString().Trim()) == (name.ToString().Trim())) { if (thisReader.GetValue(1).ToString().Trim() == pass.ToString().Trim()) { flag = true; } } } //用完后关闭连接,以免影响其他程序访问 Conn.Close(); if (flag) { MessageBox.Show("登陆成功!"); Form2 F = new Form2(); //显示主页面 F.Show(); this.Hide(); } else { MessageBox.Show("请检查你的用户名和密码!"); textBox1.Focus(); } } catch (Exception ex2) { MessageBox.Show("连接远程SQL数据库发生错误:" + ex2.ToString(), "错误!"); } } } }![图片说明](https://img-ask.csdn.net/upload/201705/19/1495162964_885089.jpg) 表里就一个Id一个Password报错是这样的,是不是我的sql语句有语法错误,查了半天查不出来,小弟还是新手,请各位大手子指点一下,不胜感激
求解c++爬虫,这个代码为何老是(hash_set)错误?
老是编译错误好难呀,越改越错只好让大佬们帮忙看看了!用的是vs2019 报错 ``` E0035 #error 指令: <hash_set> is deprecated and will be REMOVED. Please use <unordered_set>. You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning. c爬虫 C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include\hash_set 21 错误 C1189 #error: <hash_set> is deprecated and will be REMOVED. Please use <unordered_set>. You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning. c爬虫 C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include\hash_set 22 ``` 设计爬虫程序并将爬取到内容存放在文件中。 要求: 1. 可将指定URL及其级联的三级网页下面的所有URL及相应内容找出来。 2. 以BFS或者DFS策略搜索级联页面,设计相应的数据结构与文件,将URL与页面内容(文本形式)保存。 3. 提供简单的搜索引擎功能(给定字符串,如果在级联的三级网页下面下存在,则返回相应的URL) ``` #include <string> #include <iostream> #include <fstream> #include <vector> #include "winsock2.h" #include <time.h> #include <queue> #include <hash_set> #pragma comment(lib, "ws2_32.lib") using namespace std; #define DEFAULT_PAGE_BUF_SIZE 1048576 queue<string> hrefUrl; hash_set<string> visitedUrl; hash_set<string> visitedImg; int g_ImgCnt = 1;//图片编号 bool ParseURL(const string& url, string& host, string& resource) {//解析URL,解析出主机名,资源名 if (strlen(url.c_str()) > 2000) { return false; } const char* pos = strstr(url.c_str(), "http://"); if (pos == NULL) pos = url.c_str(); else pos += strlen("http://"); char pHost[100]; char pResource[2000]; if (strstr(pos, "/") == 0) { pResource[0] = '/'; pResource[1] = 0; strcpy(pHost, pos); } else sscanf(pos, "%[^/]%s", pHost, pResource); host = pHost; resource = pResource; return true; } //使用Get请求,得到响应 bool GetHttpResponse(const string& url, char*& response, int& bytesRead) { string host, resource; if (!ParseURL(url, host, resource)) { cout << "获取get请求失败" << endl; return false; } //建立socket struct hostent* hp = gethostbyname(host.c_str()); if (hp == NULL) { cout << " host 地址错误" << endl; return false; } SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == -1 || sock == -2) { cout << " sock创建失败" << endl; return false; } //建立服务器地址 SOCKADDR_IN sa; sa.sin_family = AF_INET; sa.sin_port = htons(80); memcpy(&sa.sin_addr, hp->h_addr, 4); //建立连接 if (0 != connect(sock, (SOCKADDR*)&sa, sizeof(sa))) { cout << "不能连接: " << url << endl; closesocket(sock); return false; }; //准备发送数据 string request = "GET " + resource + " HTTP/1.1\r\nHost:" + host + "\r\nConnection:Close\r\n\r\n";//字符串拼接 //发送数据 if (SOCKET_ERROR == send(sock, request.c_str(), request.size(), 0)) {//request.size()=strlen(request.c_str) cout << "send error" << endl; closesocket(sock); return false; } //接收数据 int m_nContentLength = DEFAULT_PAGE_BUF_SIZE; char* pageBuf = (char*)malloc(m_nContentLength); memset(pageBuf, 0, m_nContentLength); bytesRead = 0; int ret = 1; while (ret > 0) { ret = recv(sock, pageBuf + bytesRead, m_nContentLength - bytesRead, 0); if (ret > 0){ bytesRead += ret; } if (m_nContentLength - bytesRead < 100){ m_nContentLength *= 2; pageBuf = (char*)realloc(pageBuf, m_nContentLength); } cout << ret << " "; } cout << endl; pageBuf[bytesRead] = '\0'; response = pageBuf; closesocket(sock); return true; } //提取所有的URL以及图片URL void HTMLParse(string& htmlResponse, vector<string>& imgurls, const string& host) { const char* p = htmlResponse.c_str(); const char* tag = "href=\"";//href的内容 就是指要跳转的路由 或 方法 const char* pos = strstr(p, tag); ofstream ofile("url.txt", ios::app);//以追加的方式打开文件 while (pos){ pos += strlen(tag); const char* nextQ = strstr(pos, "\""); if (nextQ){ char* url = new char[nextQ - pos + 1]; sscanf(pos, "%[^\"]", url); string surl = url; // 转换成string类型,可以自动释放内存 if (visitedUrl.find(surl) == visitedUrl.end()) {// visitedUrl.find( surl )=visitedUrl.end() 表示visitedUrl中没有sur1 visitedUrl.insert(surl); ofile << surl << endl; hrefUrl.push(surl);//将sur1插到队列末 } pos = strstr(pos, tag); delete[] url; } } ofile << endl << endl; ofile.close(); tag = "<img "; const char* att1 = "src=\"";//规定图像的 URL。 const char* att2 = "lazy_src=\""; const char* pos0 = strstr(p, tag); while (pos0){ pos0 += strlen(tag); const char* pos2 = strstr(pos0, att2); if (!pos2 || pos2 > strstr(pos0, ">")){ pos = strstr(pos0, att1);//非延迟加载项 if (!pos) { pos0 = strstr(att1, tag); continue; } else { pos = pos + strlen(att1); } }else { pos = pos2 + strlen(att2); } const char* nextQ = strstr(pos, "\""); if (nextQ){ char* url = new char[nextQ - pos + 1]; sscanf(pos, "%[^\"]", url); cout << url << endl; string imgUrl = url; if (visitedImg.find(imgUrl) == visitedImg.end()) { visitedImg.insert(imgUrl); imgurls.push_back(imgUrl);//imgurls作为模板队列,push_back的参数由单个字符变成string类型 } pos0 = strstr(pos0, tag); delete[] url; } } cout << "网页请求成功!" << endl; } //把URL转化为文件名 string ToFileName(const string& url) { string fileName; fileName.resize(url.size()); int k = 0; for (int i = 0; i < (int)url.size(); i++) { char ch = url[i]; if (ch != '\\' && ch != '/' && ch != ':' && ch != '*' && ch != '?' && ch != '"' && ch != '<' && ch != '>' && ch != '|') fileName[k++] = ch; } return fileName.substr(0, k) + ".txt";//从第0位开始,长度为k的字符串 + .txt } //下载图片到img文件夹 void DownLoadImg(vector<string>& imgurls, const string& url) { //生成保存该url下图片的文件夹 string foldname = ToFileName(url); foldname = "./img/" + foldname; if (!CreateDirectoryA(foldname.c_str(), NULL)) cout << "不能创建文件:" << foldname << endl; char* image; int byteRead; for (int i = 0; i < imgurls.size(); i++) { //判断是否为图片 string str = imgurls[i]; int pos = str.find_last_of("."); if (pos == string::npos) continue; else { string ext = str.substr(pos + 1, str.size() - pos - 1); if (ext != "bmp" && ext != "jpg" && ext != "jpeg" && ext != "gif" && ext != "png") continue; } //下载其中的内容 if (GetHttpResponse(imgurls[i], image, byteRead)) { if (strlen(image) == 0) { continue; } const char* p = image; const char* pos = strstr(p, "\r\n\r\n") + strlen("\r\n\r\n"); int index = imgurls[i].find_last_of("/"); if (index != string::npos) { string imgname = imgurls[i].substr(index, imgurls[i].size()); ofstream ofile(foldname + imgname, ios::binary); if (!ofile.is_open()) continue; cout << g_ImgCnt++ << foldname + imgname << endl; ofile.write(pos, byteRead - (pos - p)); ofile.close(); } free(image); } } } //广度遍历 void BFS(const string& url) { char* response; int bytes; // 获取网页的相应,放入response中。 if (!GetHttpResponse(url, response, bytes)) { cout << "网页获取错误!." << endl; return; } string httpResponse = response; free(response); string filename = ToFileName(url); ofstream ofile("./html/" + filename); if (ofile.is_open()) { ofile << httpResponse << endl; // 保存该网页的文本内容 ofile.close(); } vector<string> imgurls; HTMLParse(httpResponse, imgurls, url);//解析该网页的所有图片链接,放入imgurls里面 DownLoadImg(imgurls, url); } //文件内容搜索 void Fstring(string& urlar) { int i = 0; cout << "请输入需要查找的字符串"; string defo, urltxt; cin >> defo; ifstream ifile; do { if (urlar[i] == NULL) { cout << "没有找到所要内容"; ifile.close(); return; } ifstream ifile("./html/" + urlar[i++]); ifile >> urltxt; } while (urltxt.find(defo) == string::npos);//字符串对比 cout << "搜索内容位于:" << urlar[i - 1]; ifile.close(); } int main(){ //初始化socket,用于tcp网络连接 WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { return 0; } // 创建文件夹,保存图片和网页文本文件 CreateDirectoryA("./img", 0); CreateDirectoryA("./html", 0); string urlStart = "http://hao.360.cn/meinvdaohang.html"; //cout << "请输入url"; //cin >> urlStart; BFS(urlStart); string urlar[2000]; int i = 0; // 访问过的网址保存起来 visitedUrl.insert(urlStart); while (hrefUrl.size() != 0) { string url = hrefUrl.front(); // 从队列的最开始取出一个网址 cout << url << endl; BFS(url); // 遍历提取出来的那个网页,找它里面的超链接网页放入hrefUrl,下载它里面的文本,图片 urlar[i++] = ToFileName(url); hrefUrl.pop(); // 遍历完之后,删除这个网址 } int p; cout << "是否需要查找内容?(1,查找,2退出):"; cin >> p; if (p == 1) Fstring(*urlar); WSACleanup();//解除socket return 0; } #include <string> #include <iostream> #include <fstream> #include <vector> #include "winsock2.h" #include <time.h> #include <queue> #include <hash_set> #pragma comment(lib, "ws2_32.lib") using namespace std; #define DEFAULT_PAGE_BUF_SIZE 1048576 queue<string> hrefUrl; hash_set<string> visitedUrl; hash_set<string> visitedImg; int g_ImgCnt = 1;//图片编号 bool ParseURL(const string& url, string& host, string& resource) {//解析URL,解析出主机名,资源名 if (strlen(url.c_str()) > 2000) { return false; } const char* pos = strstr(url.c_str(), "http://"); if (pos == NULL) pos = url.c_str(); else pos += strlen("http://"); char pHost[100]; char pResource[2000]; if (strstr(pos, "/") == 0) { pResource[0] = '/'; pResource[1] = 0; strcpy(pHost, pos); } else sscanf(pos, "%[^/]%s", pHost, pResource); host = pHost; resource = pResource; return true; } //使用Get请求,得到响应 bool GetHttpResponse(const string& url, char*& response, int& bytesRead) { string host, resource; if (!ParseURL(url, host, resource)) { cout << "获取get请求失败" << endl; return false; } //建立socket struct hostent* hp = gethostbyname(host.c_str()); if (hp == NULL) { cout << " host 地址错误" << endl; return false; } SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == -1 || sock == -2) { cout << " sock创建失败" << endl; return false; } //建立服务器地址 SOCKADDR_IN sa; sa.sin_family = AF_INET; sa.sin_port = htons(80); memcpy(&sa.sin_addr, hp->h_addr, 4); //建立连接 if (0 != connect(sock, (SOCKADDR*)&sa, sizeof(sa))) { cout << "不能连接: " << url << endl; closesocket(sock); return false; }; //准备发送数据 string request = "GET " + resource + " HTTP/1.1\r\nHost:" + host + "\r\nConnection:Close\r\n\r\n";//字符串拼接 //发送数据 if (SOCKET_ERROR == send(sock, request.c_str(), request.size(), 0)) {//request.size()=strlen(request.c_str) cout << "send error" << endl; closesocket(sock); return false; } //接收数据 int m_nContentLength = DEFAULT_PAGE_BUF_SIZE; char* pageBuf = (char*)malloc(m_nContentLength); memset(pageBuf, 0, m_nContentLength); bytesRead = 0; int ret = 1; while (ret > 0) { ret = recv(sock, pageBuf + bytesRead, m_nContentLength - bytesRead, 0); if (ret > 0){ bytesRead += ret; } if (m_nContentLength - bytesRead < 100){ m_nContentLength *= 2; pageBuf = (char*)realloc(pageBuf, m_nContentLength); } cout << ret << " "; } cout << endl; pageBuf[bytesRead] = '\0'; response = pageBuf; closesocket(sock); return true; } //提取所有的URL以及图片URL void HTMLParse(string& htmlResponse, vector<string>& imgurls, const string& host) { const char* p = htmlResponse.c_str(); const char* tag = "href=\"";//href的内容 就是指要跳转的路由 或 方法 const char* pos = strstr(p, tag); ofstream ofile("url.txt", ios::app);//以追加的方式打开文件 while (pos){ pos += strlen(tag); const char* nextQ = strstr(pos, "\""); if (nextQ){ char* url = new char[nextQ - pos + 1]; sscanf(pos, "%[^\"]", url); string surl = url; // 转换成string类型,可以自动释放内存 if (visitedUrl.find(surl) == visitedUrl.end()) {// visitedUrl.find( surl )=visitedUrl.end() 表示visitedUrl中没有sur1 visitedUrl.insert(surl); ofile << surl << endl; hrefUrl.push(surl);//将sur1插到队列末 } pos = strstr(pos, tag); delete[] url; } } ofile << endl << endl; ofile.close(); tag = "<img "; const char* att1 = "src=\"";//规定图像的 URL。 const char* att2 = "lazy_src=\""; const char* pos0 = strstr(p, tag); while (pos0){ pos0 += strlen(tag); const char* pos2 = strstr(pos0, att2); if (!pos2 || pos2 > strstr(pos0, ">")){ pos = strstr(pos0, att1);//非延迟加载项 if (!pos) { pos0 = strstr(att1, tag); continue; } else { pos = pos + strlen(att1); } }else { pos = pos2 + strlen(att2); } const char* nextQ = strstr(pos, "\""); if (nextQ){ char* url = new char[nextQ - pos + 1]; sscanf(pos, "%[^\"]", url); cout << url << endl; string imgUrl = url; if (visitedImg.find(imgUrl) == visitedImg.end()) { visitedImg.insert(imgUrl); imgurls.push_back(imgUrl);//imgurls作为模板队列,push_back的参数由单个字符变成string类型 } pos0 = strstr(pos0, tag); delete[] url; } } cout << "网页请求成功!" << endl; } //把URL转化为文件名 string ToFileName(const string& url) { string fileName; fileName.resize(url.size()); int k = 0; for (int i = 0; i < (int)url.size(); i++) { char ch = url[i]; if (ch != '\\' && ch != '/' && ch != ':' && ch != '*' && ch != '?' && ch != '"' && ch != '<' && ch != '>' && ch != '|') fileName[k++] = ch; } return fileName.substr(0, k) + ".txt";//从第0位开始,长度为k的字符串 + .txt } //下载图片到img文件夹 void DownLoadImg(vector<string>& imgurls, const string& url) { //生成保存该url下图片的文件夹 string foldname = ToFileName(url); foldname = "./img/" + foldname; if (!CreateDirectoryA(foldname.c_str(), NULL)) cout << "不能创建文件:" << foldname << endl; char* image; int byteRead; for (int i = 0; i < imgurls.size(); i++) { //判断是否为图片 string str = imgurls[i]; int pos = str.find_last_of("."); if (pos == string::npos) continue; else { string ext = str.substr(pos + 1, str.size() - pos - 1); if (ext != "bmp" && ext != "jpg" && ext != "jpeg" && ext != "gif" && ext != "png") continue; } //下载其中的内容 if (GetHttpResponse(imgurls[i], image, byteRead)) { if (strlen(image) == 0) { continue; } const char* p = image; const char* pos = strstr(p, "\r\n\r\n") + strlen("\r\n\r\n"); int index = imgurls[i].find_last_of("/"); if (index != string::npos) { string imgname = imgurls[i].substr(index, imgurls[i].size()); ofstream ofile(foldname + imgname, ios::binary); if (!ofile.is_open()) continue; cout << g_ImgCnt++ << foldname + imgname << endl; ofile.write(pos, byteRead - (pos - p)); ofile.close(); } free(image); } } } //广度遍历 void BFS(const string& url) { char* response; int bytes; // 获取网页的相应,放入response中。 if (!GetHttpResponse(url, response, bytes)) { cout << "网页获取错误!." << endl; return; } string httpResponse = response; free(response); string filename = ToFileName(url); ofstream ofile("./html/" + filename); if (ofile.is_open()) { ofile << httpResponse << endl; // 保存该网页的文本内容 ofile.close(); } vector<string> imgurls; HTMLParse(httpResponse, imgurls, url);//解析该网页的所有图片链接,放入imgurls里面 DownLoadImg(imgurls, url); } //文件内容搜索 void Fstring(string& urlar) { int i = 0; cout << "请输入需要查找的字符串"; string defo, urltxt; cin >> defo; ifstream ifile; do { if (urlar[i] == NULL) { cout << "没有找到所要内容"; ifile.close(); return; } ifstream ifile("./html/" + urlar[i++]); ifile >> urltxt; } while (urltxt.find(defo) == string::npos);//字符串对比 cout << "搜索内容位于:" << urlar[i - 1]; ifile.close(); } int main(){ //初始化socket,用于tcp网络连接 WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { return 0; } // 创建文件夹,保存图片和网页文本文件 CreateDirectoryA("./img", 0); CreateDirectoryA("./html", 0); string urlStart = "http://hao.360.cn/meinvdaohang.html"; //cout << "请输入url"; //cin >> urlStart; BFS(urlStart); string urlar[2000]; int i = 0; // 访问过的网址保存起来 visitedUrl.insert(urlStart); while (hrefUrl.size() != 0) { string url = hrefUrl.front(); // 从队列的最开始取出一个网址 cout << url << endl; BFS(url); // 遍历提取出来的那个网页,找它里面的超链接网页放入hrefUrl,下载它里面的文本,图片 urlar[i++] = ToFileName(url); hrefUrl.pop(); // 遍历完之后,删除这个网址 } int p; cout << "是否需要查找内容?(1,查找,2退出):"; cin >> p; if (p == 1) Fstring(*urlar); WSACleanup();//解除socket return 0; } ```
C++调用Python GridSearchCV和joblib报错
我现在使用QT C++调用python的xgboost算法,算法包含了网格搜索gridsearch和模型保存joblib,python算法在pycharm中运行没有错误,但是C++调用的时候会报错。 Python代码段 clf = GridSearchCV(estimator=XGBRegressor(seed=7), param_grid=parameters, cv=5, verbose=1, n_jobs=3) clf.fit(X_study, y_study) print("best param" + str(clf.best_params_)) print("best score" + str(clf.best_score_)) print("best estimator" + str(clf.best_estimator_)) # XGBRegModel = XGBRegressor(**clf.best_params_) # #这是测试集验证集返回验证效果 X_train, X_test, y_train, y_test = train_test_split(X_study, y_study, test_size=0.1) XGBRegModel.fit(X_train, y_train) joblib.dump(XGBRegModel, path) C++代码段中使用PyObjectCallFunction函数获取值,只要我python文件中包含了gridsearchCV或者joblib这两部分就会报错 Exception ignored in: <module 'threading' from 'C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_64\\Lib\\threading.py'> Traceback (most recent call last): File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Lib\threading.py", line 1289, in _shutdown assert tlock.locked() SystemError: <built-in method locked of _thread.lock object at 0x000000000590BC88> returned a result with an error set 如果去掉单独运行xgboost算法不会报错,请问这是什么原因,我看其他帖子里面说的是线程的问题,但是xgboost算法本身也是多线程,就没有报错,所以我个人还是认为Gridsearch和joblib本身存在着什么特殊情况? 请各位大神指点!
c#用serialport进行的串口数据接收,遇到了问题,求大神指点
运行后再richtextbox1中只显示一个数,例如:33 随后会报错:对象未引用到对象的实例,点了关闭后又会出现一个数据,例如31,之后又会报错,如此循环,而且数据不太对。 整了好久了,希望能帮帮忙,第一次做这,谢谢!! 代码: namespace yfy_串口调试 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /****************************设置变量******************************/ public string[] strArray; public SerialPort sp1 = new SerialPort(); public Byte[] mydata; public int mydatalength; //这个数的值是由接收到的字节长度决定的,并且作为mydata的长度,如果索引值还超过数组定义值,就应该是接收问题。 public int zhengfu = 2, now_x = 30; public static Bitmap bmp = new Bitmap(500,350); public Graphics gph = Graphics.FromImage(bmp); public char name_image='A'; /*****************************相关函数****************************/ public void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)//数据接收函数 { if (sp1.IsOpen==true ) //为了严谨性,加上检查串口是否被打开 { if (rbRcv16.Checked == true) //接收16进制按钮 { try { int average_speed = 0; //设置初始平均速度 Byte[] receivedData = new Byte[sp1.BytesToRead]; //创建接收字节数组 sp1.Read(receivedData, 0, receivedData.Length); //读取数据 sp1.DiscardInBuffer(); //清空SerialPort控件的Buffer mydatalength = receivedData.Length; for (int i = 0; i < receivedData.Length; i++) //窗体显示 { richTextBox1.Text = receivedData[i].ToString("X2"); //16进制显示在接受栏 mydata[i] = receivedData[i]; richTextBox1.Text += ","; //让每个数据都隔开 average_speed += receivedData[i]; } textBox1.Text = (average_speed / receivedData.Length).ToString("X2"); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "出错提示"); } } } else { MessageBox.Show("请打开某个串口或者没有选中16进制接收", "错误提示"); } } private void Form1_Load(object sender, EventArgs e)//页面初始化 { Control.CheckForIllegalCrossThreadCalls = false; //强制不检查线程 sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); //订阅委托 sp1.ReceivedBytesThreshold =1; //当缓冲区的字节数为x时,触发datareceive事件 //检查是否有串口 string[] str = SerialPort.GetPortNames(); if (str == null) { MessageBox.Show("本机没有串口!", "Error!"); return; } //添加串口项目 foreach (string s in System.IO.Ports.SerialPort.GetPortNames()) { cbSerial.Items.Add(s); //获取有COM口 } rbRcv16.Checked = true; //接收数据按16进制进行 } private void btnSwitch_Click(object sender, EventArgs e)//设置串口 { if (sp1.IsOpen == false) { try { string serialName = cbSerial.SelectedItem.ToString();//读取串口号 sp1.PortName = serialName; //设置串口号 sp1.BaudRate = 9600; //波特率 sp1.DataBits = 8; //数据位 sp1.StopBits = StopBits.One; //停止位 sp1.Parity = Parity.None; //校验位 sp1.Open(); //打开串口 btnSwitch.Text = "关闭串口"; } catch (System.Exception ex) { MessageBox.Show("Error:" + ex.Message, "Error"); return; } } else { sp1.Close(); //关闭串口 btnSwitch.Text = "打开串口"; } }
(图像采集)C++转C#如何实现
我在使用第三方的图像采集代码库(C++编码),想转成C#,结果不知如何实现? 我尽可能提供更加详细的信息,期待大神能够帮忙解决。 1)第三方提供的图像采集头文件:-------------------------------------- #ifndef __ATCAM_H__ #define __ATCAM_H__ #ifdef ATCAM_EXPORTS #define ATCAM_API __declspec(dllexport) #else #define ATCAM_API __declspec(dllimport) #endif //Parameters Defines #define PARA_CAM_INT 0x5001 #define PARA_CAM_GAIN 0x5002 //Acquire Information typedef struct _AtInfo { int CodeAcq; //Code Acquire void * pData; //Data Pointer void * Context; //Context For User Application }AtInfo,*PAtInfo; //CallBack Function typedef void (__stdcall *AtCallBack)(AtInfo * pInfo); #ifdef __cplusplus extern "C" { #endif //Get Device Count ATCAM_API int __stdcall AtCamDev( int * count ); //Open the Selected Device ATCAM_API int __stdcall AtCamOpen( int devNo ); //Close the Selected Device ATCAM_API int __stdcall AtCamClose( int devNo ); //Get Device Parameters ATCAM_API int __stdcall AtCamGet( int devNo, int para, void * buf ); //Set Device Parameters ATCAM_API int __stdcall AtCamSet( int devNo, int para, int * buf ); //Start Acquire ATCAM_API int __stdcall AtCamStart( int devNo, PAtInfo pInfo, AtCallBack callBack ); //Stop Acquire ATCAM_API int __stdcall AtCamStop( int devNo ); #ifdef __cplusplus } #endif #endif 2)C++中图像采集实现:---------------------------------------------- 头文件中的定义: AtInfo m_sInfo; static void __stdcall AcqCallBack(PAtInfo pInfo); 在*.cpp文件中 AtCamStart(0,&m_sInfo,AcqCallBack); //采集回调函数 void CAtCamDemoDlg::AcqCallBack(PAtInfo pInfo) { //获取上下文信息,发送更新消息 CAtCamDemoDlg * pDlg = (CAtCamDemoDlg*)pInfo->Context; ::PostMessageW( pDlg->m_hWnd,WM_ACQUIRED,(WPARAM)pInfo,pInfo->CodeAcq ); } /采集更新消息函数 LONG CAtCamDemoDlg::OnAcquired(WPARAM wParam, LPARAM lParam) { //未启动采集,返回 if( false == m_bAcquiring ) return 0; //采集结果判断 int rc = (int)lParam; if( 0!=rc ) { OnBnClickedBtnRun(); MessageBox(_T("采集失败!"),_T("错误"),MB_OK); } else { //成功采集,拷贝数据,更新显示 memcpy(m_pDataBuf, m_sInfo.pData, IMAGES); if( false == m_ctrlImage.m_bUpdating ) m_ctrlImage.UpdateImage(m_pDataBuf); } return 0; } 3)我在C#中的定义:---------------------------------------------------- public struct AtInfo { public int CodeAcq; public IntPtr pData; public IntPtr Context; }; //grab start [DllImport("AtCam.dll", EntryPoint = "AtCamStart")] public static extern int AtCamStart(int devNo, out AtInfo pInfo, AtCallback callback); 4)我的实现:---------------------------------------------------------- 开始采集 private void Btn_GrabStart_Click(object sender, EventArgs e) { if (!camOpened) return; if (inAcquiring) return; int ret = 0; ret=OptiMat.AtCamStart(0, out sInfo, AcqCallback); textBox1.Text += Environment.NewLine + "Capture Start return: " + ret.ToString(); inAcquiring = true; } 回调: private void AcqCallback(out AtInfo info) { AtInfo info0 = new AtInfo(); info=info0; OptiMatImage.PostMessage(hShowMsgWin, OptiMatImage.IMG_MESSAGE, info.CodeAcq, info); } 消息处理: protected override void DefWndProc(ref Message m) { switch (m.Msg) { //接收自定义消息MYMESSAGE,并显示其参数 case OptiMatImage.IMG_MESSAGE: AtInfo ml = new AtInfo(); ml.pData = m.LParam; ml.CodeAcq = (m.WParam).ToInt32(); ShowImage(ml); break; default: base.DefWndProc(ref m); break; } } 图像显示: private void ShowImage(AtInfo ip) { Marshal.Copy(ip.pData, dataBuf, 0, OptiMat.IMAGES); } 在这一步会出现以下错误: ![图片说明](https://img-ask.csdn.net/upload/201809/14/1536913950_239629.png) 请指出------------------------------------------------------------------ 1)哪里出现错误了; 2)我不熟悉这种转换,如何改进比较好?
新手来求助,关于C#服务器端与客户端通讯的问题
string strReceive = System.Text.Encoding.Default.GetString(ReceiveBuff, 0, 256);//strReceive是接收到的客户端发的消息内容  char[] ch1 = strReceive.ToCharArray(0, 1);//取这条消息的第一个字符  if (ch1[0]!='d')//如果第一个字符为d {   (补充说明:客户端发的d开头的消息的格式,就是d**, **指代一个用户名)   这里的内容:获取strReceive字符串自第2个字符开始至最后,即获取 用户名,把获取的新的字符串赋给string sss;连接数据库,执行SQL命令,就是把 该用户名的状态设置成下线。 } if(ch1[0]!='d')//如果第一个字符不为'd' {     (补充说明:客户端发的不为d开头的消息的格式,就是 **,##    其中**指代用户名,##指代密码)      这里的内容:分别获取strReceive字符串的 **,##,赋给新的变量,连接数据库,执行SQL命令,对用户进行登录验证,若验证通过则把其状态设置成上线。否则返回登录失败给客户端。 } 感觉这样子,逻辑上没有问题了呀,接下来说说运行结果。 1.客户端发送消息  d陈杰   给服务器 服务器端的界面上有设置了一个按钮,单击后能导出当前数据库的内容,所以当服务器收到客户端的这条消息后,服务器上导出的数据库中陈杰的状态更改为下线了。 2.客户端发送消息  陈杰,cj  给服务器 .验证通过,服务器则给客户端返回成功的消息,并且服务器上导出的数据库里陈杰的状态也更改为上线了。 【这样子的顺序是OK的,但不是我想要的结果,我想要先客户端发送用户名和密码,然后客户端再发该用户要下线的消息,但是问题来了,请看下面】 .{我把上面这样子执行过的关掉,所有都重新开始运行} .1.客户端发送 消息   张明,zm  给服务器    . .通过验证了,服务器端导出的数据库,张明的状态也显示为上线了。但是发现: 我在服务器界面上放的一个textbox, 里面代码 if(ch1[0]=='d')  { string sss = strReceive.Substring(1, revLength - 1);textBox1.Text = sss;UserDown(sss);}   它是在这段里用的,不是当ch1[0]=='d'时,它才会有内容吗?明明发的不是d开头的,它为什么还显示内容,而且显示的吧,张明和zm中间没了逗号,也不是客户端发的内容。 下面客户端将要发送 用户下线的消息了。 2.客户端发送消息  d张明  给服务器 .点击服务器上的导出按钮,显然导出的数据库上张明的状态并没更新为下线。 . .【整个运行过程都没有报一点错,但是为什么2次客户端发送的消息顺序不一样,就导致它判断客户端发送的消息是否是d开头判断错误了呢。】 .帮忙看看它究竟是哪里产生了问题呢。 这是关于什么阻塞么,但是同样的内容只有执行的顺序不一样呀。本人第一次接触这上面,不懂究竟是哪里的问题,怎么解决了,求大神指点一下撒。
求c# mvc <select>.value正确获取方案!!!!好急!!!!!
view中 表单代码<% using (Html.BeginForm("DateSearch", "home")) {%> <input type="hidden" id="dt" value="dt" /> <input type="text" placeholder="年" name="year" class="time"/>- <input type="text" placeholder="月" name="month" class="time"/>- <input type="text" placeholder="日" name="day" class="time"/> &nbsp &nbsp &nbsp 数据名 <select id="datename" name="datename" onchange="data_change" > <option value="temp_01" >陆上温度</option> <option value="press_01" >陆上压力</option> </select> <button onclick="form1.action='../../Controllers/IndexController.cs';form1.submit()">查询</button> <%}%> controller中 public ActionResult DateSearch() { sqlconnection sc = new sqlconnection(); string datename = Request.Form["dt"] ; var datestring = sc.query(datename); return View(datestring); } aspx.cs中 控制器中query函数代码 public string[] query(string datename) { connect(); string[] querydata=null; command = new SqlCommand("select " +datename+" from meas_group01", connection); SqlDataReader myReader=null; myReader = command.ExecuteReader(); while(myReader.Read()&&myReader!=null) { for (int i = 0; i < myReader.FieldCount; i++) { querydata[i] = myReader[i].ToString(); } }myReader.Close(); close(); return querydata; } 显示错误是关键字 'from' 附近有语法错误 我判断是select的value值取得为null 求正确解决方案!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ObjectContext.SaveChanges()里面执行的SQL语句有没有办法获取到
在代码中插入数据时,执行ObjectContext.SaveChanges()报mysql语句错误,是否有办法获取到该方法执行的sql语句
代码没有错误,为什么程序没运行完就直接结束了?
![图片说明](https://img-ask.csdn.net/upload/201908/08/1565246195_162168.png) ![图片说明](https://img-ask.csdn.net/upload/201908/08/1565246218_224284.png) ``` //主要功能:实现带小数二进制和十进制之间数据的转换 #include <iostream.h> #include <windows.h> #include <fstream.h> #include <string> #include <math.h> using namespace std; const int TAILMAXLENTH=10;//定义十进制转换成二进制小数部分最大位数 const int DABAMAXLENTH=40;//定义原始数据的最大长度 const double ADDMENBERNUM=111.11;//定义一个加数用于检测数据真实可用 /********************************************************************************************************* *栈的部分 *********************************************************************************************************/ class Stack;//类Stack的声明 /* 定义一个链栈结点类Stacknode */ class Stacknode { friend class Stack;//申请友元类 private: Stacknode(Stacknode *nextp=NULL);//构造函数 Stacknode(int &newdata,Stacknode *nextp=NULL);//构造函数 int data;//数据元素 Stacknode *next;//递归定义指向后继结点的指针 }; /* Stacknode的实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(int &newdata,Stacknode *nextp)//构造函数 { data=newdata; next=nextp; } //结点类Stacknode的定义结束 /* 定义一个链栈类Stack */ class Stack { public: Stack();//创建一个空栈 ~Stack();//回收一个栈 void clear();//销毁一个栈 bool empty() const;//确定栈是否已空 bool push(int &item);//把数据压进栈 bool pop();//出栈 bool top(int &item) const;//取出栈顶元素 private: Stacknode *newnode(Stacknode *nextp=NULL); Stacknode *newnode(int &item,Stacknode *nextp=NULL);//创建新的结点 Stacknode *Stacktop; int Stacklength; }; /* Stack的实现部分 */ Stacknode *Stack::newnode(Stacknode *nextp)//创建新的结点,不带数据 { return new Stacknode(nextp); } Stacknode *Stack::newnode(int &item,Stacknode *nextp)//创建新的结点,数据域赋值 { return new Stacknode(item,nextp); } //以下为栈类Stack的函数定义 Stack::Stack()//创建一个空栈 { Stacktop=newnode();//创建一个栈顶指针初始化,相当于Stacktop=NULL;本链表没有用头结点 Stacklength=0; } Stack::~Stack()//回收一个栈 { clear(); delete Stacktop;//释放栈底 } void Stack::clear()//销毁一个栈 { //while(pop());//不停地出栈,而每次释放空间在出栈函数中完成 Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 while(Stacktop->next!=NULL) { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 delete usednodep;//释放空间 } } bool Stack::empty() const//确定栈是否已空 { return Stacklength<=0?true:false; } bool Stack::push(int &item)//数据进栈 { Stacknode *newnodep;//定义指针newnodep,准备指向申请的新结点 newnodep=newnode(item,Stacktop);//申请新结点,把数据存入,把指针域指向头指针 if(!newnodep)//如果没有申请到空间,返回失败 return false; Stacktop=newnodep;//改链,完成进栈 Stacklength++;//栈的长度增加 return true;//本次操作成功 } bool Stack::pop()//出栈,不要栈顶数据 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 // delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::top(int &item) const//取出栈顶数据返回去 { if(!empty())//如果栈不空,记录当前栈顶元素 { item=Stacktop->data;//通过item返回去 return true;//本次操作成功 } return false;//否则本次操作失败 } /********************************************************************************************************* *队列的部分 *********************************************************************************************************/ /* 定义一个结点类node */ class node { public: int data; node *next; }; /* 定义一个链队类Queue */ class Queue { private: node *rear; node *front; protected: int count;//计数器,统计结点个数即线性队列的长度 public: Queue();//构造函数 ~Queue();//析构函数 void clear(void);//清空链队 bool empty(void) const;//判断是否空队 bool retrieve(int &item) const;//读取队头 bool append(const int &item);//数据入队 bool serve();//数据出队 }; /* 类Queue的实现部分 */ Queue::Queue()//构造函数 { front=new node;//申请新结点,作为队头结点 front->next=NULL; rear=front;//队尾指针指向队头 count=0;//计数器清零,队列开始时没有实际数据 } Queue::~Queue()//析构函数 { clear();//删除所有数据,释放所有结点 delete front;//把头结点也释放掉 count=0;//计数器清零,队列开始时没有实际数据 } void Queue::clear(void)//清空链队 { node *searchp=front->next,*followp=front;//初始化两个指针 while(searchp!=rear) { followp=searchp; searchp=searchp->next; delete followp; } front->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空 rear=front; count=0;//计数器也清零 } bool Queue::empty(void) const//判断是否空链 { return count==0?true:false; } bool Queue::retrieve(int &item) const//读取队头 { if(empty())//处理意外 return false; item=front->next->data;//返回读取的数据 return true;//本次操作成功 } bool Queue::append(const int &item)//进队 { node *newnodep=new node; newnodep->data=item;//给数据赋值 rear->next=newnodep;//这一步可以看出有头结点 rear=rear->next;//改动队尾指针的位置 count++;//计数器加1 return true; } bool Queue::serve()//出队 { if(empty())//空队处理 return false; node *tempp=front->next; // item=tempp->data;//保存数据 front->next=tempp->next;//改变指针 delete tempp;//释放该结点 count--;//计数器减1 return true; } /********************************************************************************************************* *定义一个功能类NumSysConversion *********************************************************************************************************/ class NumSysConversion { private: int inter; float floater; Stack *stack; Queue *queue; public: NumSysConversion();//构造函数 ~NumSysConversion();//析构函数 bool check(char *array,int number);//检查输入数据是否符合要求 void change(char *array,int number);//将原始数据转化成数值 double change_to_aim(int tokind);//将原始数据转化成目标进制的数据 }; NumSysConversion::NumSysConversion()//构造函数 { stack=new Stack; queue=new Queue; inter=0; floater=0; } NumSysConversion::~NumSysConversion()//析构函数 { delete stack; delete queue; } bool NumSysConversion::check(char *array,int number)//检查输入数据是否符合要求 { bool flag=true; for(int i=0;array[i]!='\0';i++) { cout<<array[i]; if(array[i]-48>=number) { flag=false; break; } } return flag; } void NumSysConversion::change(char *array,int number)//将原始数据转化成数值 { int flag=0,j=0; for(int i=0;array[i]!='\0';i++) { if(array[i]=='.') { flag=1; continue; } if(flag==0)//取整数数据 inter=inter*number+array[i]-48; if(flag==1)//取小数数据 floater+=(float)(((int)array[i]-48)*(float)pow(number,--j)); } } double NumSysConversion::change_to_aim(int tokind)//将原始数据转化成目标进制的数据 { int count=0,temp,flag=0,num; double resnumb=0; //第一步:先将整数部分转换进制后的数据依次入栈 while(inter) { num=inter%tokind; stack->push(num); inter/=tokind; } //第二步:再将小数部分转换进制后的数据依次入队 while(floater&&count<TAILMAXLENTH) { queue->append(int(floater*tokind)); floater*=tokind; if(floater>=1) floater-=(int)floater; count++; } //第三步:显示栈和队中的数据并将其转换成可用数据 cout<<"数据转换后为:"; while(!stack->empty()) { stack->top(temp); stack->pop(); cout<<temp; resnumb=resnumb*tokind+temp; flag=1; } if(!queue->empty()) { if(flag==0) cout<<"0"; cout<<"."; count=-1; } while(!queue->empty()) { queue->retrieve(temp); queue->serve(); cout<<temp; resnumb+=temp*pow(tokind,count--); } cout<<endl; //第四步:清空栈和队中的数据 stack->clear(); queue->clear(); inter=0; floater=0; //第五步:将可用数据信息返回 return resnumb; } /* 定义一个实现进制转换功能的菜单处理类interfacebase */ class interfacebase { private: NumSysConversion NumSysConversiononface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 void processmenu(int menuchoice);//菜单函数 }; /* 类interfacebase的实现部分 */ void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"进制转换功能菜单"<<endl; cout<<"================"<<endl; cout<<"1.十进制转换为二进制"<<endl; cout<<"2.二进制转换为十进制"<<endl; cout<<"0.结束程序"<<endl; cout<<"================"<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } void interfacebase::processmenu(int menuchoice) { switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: { char array[10]={'0','.','1','2','5'}; int number=10; if(NumSysConversiononface.check(array,number)) cout<<"符合要求!"<<endl; else cout<<"不符合要求!"<<endl; NumSysConversiononface.change(array,number); cout<<NumSysConversiononface.change_to_aim(2)<<endl; cout<<"进制转换成功!"<<endl; } break; case 2: { char array[10]={'1','1','1','1'}; int number=2; if(NumSysConversiononface.check(array,number)) cout<<"符合要求!"<<endl; else cout<<"不符合要求!"<<endl; NumSysConversiononface.change(array,number); cout<<NumSysConversiononface.change_to_aim(10)<<endl; cout<<"进制转换成功!"<<endl; } break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacenow; system("color f0");//修改屏幕的背景色和字的颜色 interfacenow.clearscreen();//清屏 while(1)//永真循环 { interfacenow.showmenu();//显示菜单 menuchoice=interfacenow.userchoice();//获取用户的选择 interfacenow.processmenu(menuchoice);//处理用户的选择 system("pause");//暂停 interfacenow.clearscreen();//清屏 } }//主函数结束 ```
关于C#下基于snmpsharpnet的snmp开发中IPV6的问题。
在网上找到了一些获取主机的磁盘使用情况的代码: protected void Button1_Click(object sender, EventArgs e) { double[] diskstorage1, diskstorage2; diskstorage1 = snmpget("127.0.0.1", "public", 1); this.Label1.Text += Environment.NewLine; diskstorage2 = snmpget("fe80::357b:bacf:e6b4:5910%3", "public", 2); //foreach (double dou in diskstorage1) //{ // this.txtContent.Text += string.Format("{0} GB \r\n", dou.ToString("f2")); //} } 如上面的diskstorage2 中,将IP地址写成IPV6的地址就会发生如下错误: Request has reached maximum retries. 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: SnmpSharpNet.SnmpException: Request has reached maximum retries. 源错误: 行 73: 行 74: // Make SNMP request 行 75: result = (SnmpV1Packet)target.Request(pdu, param); 行 76: 行 77: // If result is null then agent didn't reply or we couldn't parse the reply. 源文件: e:\Program Files (x86)\Visual Studio 2010\WebSites\biyesheji\mange\getDISK.aspx.cs 行: 75 堆栈跟踪: [SnmpException: Request has reached maximum retries.] SnmpSharpNet.UdpTransport.Request(IPAddress peer, Int32 port, Byte[] buffer, Int32 bufferLength, Int32 timeout, Int32 retries) +1088 SnmpSharpNet.UdpTarget.Request(Pdu pdu, IAgentParameters agentParameters) +670 mange_Default.snmpget(String ipaddress, String comname, Int32 i) in e:\Program Files (x86)\Visual Studio 2010\WebSites\biyesheji\mange\getDISK.aspx.cs:75 mange_Default.Button1_Click(Object sender, EventArgs e) in e:\Program Files (x86)\Visual Studio 2010\WebSites\biyesheji\mange\getDISK.aspx.cs:22 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628722 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724 是否是ipadress这个元数据中没有定义IPV6的相关类,还是UdpTransport中INT32需要改成INT128?如果是该怎么修改?
推荐 130 个令你眼前一亮的网站,总有一个用得着
总结了大学生活两年来,发现的 130 余个黑科技网站,总有一个会让你眼前一亮,赶紧收藏!
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Flutter 会不会被苹果限制其发展?
这个可能性是存在的,而且不止是 flutter、react-native 、weex 、uni-app 、taro 、Hippy等都存在这个风险,虽然有些框架对比起 flutter 其他框架存在时间稍长,但是这不可否认它们一直都存在这个风向。 只要不是平台自己的亲儿子,那么肯定存在被限制发展的风险,所以这件事上是风险和收益之间的博弈,这是一个“后妈和前任之间的太极。” 先说现状 如今各大平台,如:...
没用过这些 IDEA 插件?怪不得写代码头疼
使用插件,可以提高开发效率。对于开发人员很有帮助。这篇博客介绍了IDEA中最常用的一些插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
Linux必懂知识大总结(补)
关机 1. 数据同步写入磁盘 sync 为了加快对磁盘上文件的读写速度,位于内存中的文件数据不会立即同步到磁盘上,因此关机之前需要先进行 sync 同步操作。 2. shutdown # /sbin/shutdown [-krhc] [时间] [警告讯息] -k : 不会关机,只是发送警告讯息,通知所有在线的用户 -r : 将系统的服务停掉后就重新启动 -h : 将系统的服务停掉后就...
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
立即提问