C# 的服务器向之前登陆的时候保存的客户端Socket发送数据的时候报错了 60C

报错:The operation is not allowed on non-connected sockets.
问题是这样的,制作添加好友模块时,遇到了一个问题,就是在登录的时候,服务端会通过ID绑定那个Socket:


//目前在线的客户端字典,与ID绑定
Dictionary<int, Socket> DicOnlineClients;

绑定:

 //向目前在线的客户端列表添加这个客户端
DicOnlineClients.Add(playerID, packet._peer);

然后发送好友请求的时候会通过这个ID发到与这个ID绑定的Socket上,前提是这个客户端没有离线

 //获取此ID的Socket
Socket socket;
if (DicOnlineClients.TryGetValue(FriendID,out socket))
{
    _server.Send(SendStream, socket);
}

但是问题出在,在Send的时候,报错了 The operation is not allowed on non-connected sockets.
可是我客户端的socket明明是在线的啊
请大神帮忙解答下。或者有没有其他的方法,用于向指定的客户端发送数据的,我这里用的是通过玩家ID辨识

2个回答

send 返回并不表示数据发送成功,它只表示数据被拷贝到了发送缓冲区,下面将有协议栈来完成物理传输过程。
当协议栈在发送数据时,发送缓冲区是锁定的,这时在往里面拷贝数据是不成功的;
也就是说,在发送数据时,在send是会失败的。所以每次send都需要检查返回值。
就是你发送太快了 等对方接收了 你的send就会成功了 所以为了效率 你至少用下select、event等等这些简单的模式...

qq_27305193
G--G 没有频繁的发送啊,而且我是在DEBUG模式下,就是在发送的执行send的时候报错了,
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#Socket编程,能实现客户端发送一个txt文件即可,怎么写?

C#Socket编程,只写客户端(127.0.0.1:5555),能实现发送一个txt文件到服务器,文件目录可以直接指定,怎么写呢?大神们?

各位大神,C#用socket怎么实现定时自动由客户端向服务端发数据

各位大神,C#用socket怎么实现定时自动由客户端向服务端发数据

C# 单客户端 多服务器同时收发数据

需要用C#编写TCP协议的客户端接收两个服务器传过来的文件。使用了两个Socket连接两个服务器,每一个socket都有一个单独的接收线程recmsg,多线程+阻塞模式。 现在的问题是两个服务器有可能会在同一时刻向客户端发送文件,客户端同一IP地址下从不同端口同时接收到了文件。这种情况下是否会出现冲突的情况,客户端无法判断优先从哪个端口接收数据? 如果会有冲突,那么应该采用何种方式解决这种客户端同时接收到文件的情况? 部分代码如下 private void Form1_Load(object sender, EventArgs e) { socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.2.100"), 7890); socketClient.Connect(ipe); threadClient = new Thread(RecMsg); threadClient.IsBackground = true; threadClient.Start(); Message.AppendText("已经与服务端100建立连接,可以开始通信...\r\n"); socketClient2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ipe2 = new IPEndPoint(IPAddress.Parse("192.168.2.110"), 7890); socketClient2.Connect(ipe2); threadClient2 = new Thread(RecMs); threadClient2.IsBackground = true; threadClient2.Start(); Message.AppendText("已经与服务端110建立连接,可以开始通信...\r\n"); }

java客户端 c#服务端(同一台电脑)进行socket通讯 客户端发送文本消息到服务端

socket连接部分可以省略 只要客户端的发送数据部分和服务端的接收数据部分 我主要不知道java和C#的字符集以及该用什么方法比较好

socket客户端定时向服务器发数据

想实现一个socket定时发送数据的功能。不用接收。数据从本地计算机的文件中读取。 然后每隔比如200ms发送一百字节。直到把文件读完。读取文件用什么函数好fread 和fwrite 还是CFILE类好。定时器定义在什么地方。怎么实现定时向固定端口发送数据。

Java 如何在建立 Socket 通信后主动向 C#客户端发送信息

使用Java服务器与C#客户端成功建立套接字通信后,Java服务器如何主动向C#客户端发送消息?我只能在成功建立的那一刻向客户发送信息,但这不是我想要的。 项目启动时将开始创建套接字连接,但在建立之后,我无法自己向客户端发送信息。 -----这是负责建立套接字通信的代码。 ``` public void openSocket() throws IOException { Socket socket = null; try { ServerSocket serverSocket = new ServerSocket(5656); log.info("server msg : UnitySocket server start {port : [5656]}"); socket = serverSocket.accept(); log.info("server msg : socket msg [client send !]"); inputStream = new BufferedInputStream(socket.getInputStream()); byte[] out_massage = new byte[messageLengthBytes]; inputStream.read(out_massage); log.info("server msg : client msg is [ "+(new String(out_massage,"utf-8"))); OutputStream outputStream = socket.getOutputStream(); outputStream.write(socket_massage.getBytes()); // socket_massage = "welcome_send_server_!" } catch (IOException e) { e.printStackTrace(); }finally { if(socket != null){ socket.close(); } socket = null; } ``` 这是要发送给客户端的数据 ``` public Boolean askMoveUp(String address, String project, String name, String massage, String startTime, String endTime, String token) throws IOException { StringBuffer stringBuffer = new StringBuffer(); SocketMassage socketMassage = new SocketMassage(); String msg; stringBuffer.append(address).append("_"); stringBuffer.append(project).append("_"); stringBuffer.append(name).append("_"); stringBuffer.append(massage).append("_"); stringBuffer.append(startTime); msg = stringBuffer.toString(); socketMassage.setMsg(msg); return true; } ``` 我想要做的是askMoveUp()方法中的msg数据。如何在openSocket()方法中像socket_massage一样发送给客户端?当项目启动时,socket_massage中的数据被发送到客户端,但msg是如何发送的?希望大家能给我一个帮助,谢谢!

c#将客户端发来的数据流实时转发给另一个客户端 服务器数据缓冲区的建立问题

我想要实现两部安卓客户端的实时语音通讯,安卓客户端都在内网,因此需要一外网pc做数据的中转服务器,安卓语音发送端通过audiotrack录制PCM音频数据并实时发送到服务器,服务器接收数据并不断读入一个缓冲区,开启另一个线程循环读取缓冲区的数据同时将数据发送到另一个安卓客户端,问题就在于服务器的缓冲区要怎么做?怎么保证缓冲区的数据同时被两个线程操作时的有序稳定 求大神指教,假设网络良好,不考虑网络波动带来的数据处理问题。

c#获取服务器数据到客户端

请问c#用什么方式来获取其他服务器数据,web service还是其他的方式

客户端怎么发送心跳包到服务器端

想做一个检测用户实时在线的功能,网上找了一个例子,在本地可以查看到用户在线 情况,但是怎么将服务端部署到服务器呢,实现客户端发送心跳包给服务器。

c#socket双向通信,收不到服务器的反馈信息

请问大神们:为什么c#socket通信时,同步的,客户端必须先收到服务器的应答,才开始发送数据,但是在服务器收到数据处理完后,反馈给客户端时为什么收不到了?

窗口中socket通信服务器向客户端发消息,客户端自动返回:繁忙,下面是客户端代码:

// 接收数据信息 public void ReceiveMsg() { while (true) { try { byte[] date = new byte[1024]; int recv = socket.Receive(date); string str = Encoding.UTF8.GetString(date,0,recv); } catch (SocketException ex) { } } } public void listTest(Object o, EventArgs e, String str) { this.richTextBox1.Text = str; } //设置控件状态 public void Status(Object o, EventArgs e) { lblStatus.Text = "连接成功."; button1.Enabled = false; } //回调(异步调用连接请求) private static void ConnectCallback(IAsyncResult er) { try { // 获取到异步操作信息 Socket client = (Socket)er.AsyncState; UpdateStatus(new Form1(), new EventArgs()); StateObjcet state = new StateObjcet(); state.workSocket = client; client.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); // Receive(client); // 结束挂起异步连接操作请求 //client.EndConnect(er); } catch(Exception e) { MessageBox.Show(e.ToString()); return; } } //异步发送信息 /// <summary> /// 异步发送 /// </summary> /// <param name="er"></param> private static void SendCallback(IAsyncResult er) { try { //获取异步对象异步操作信息 Socket Client = (Socket)er.AsyncState; //挂起异步 发送请求 int byteSend = Client.EndSend(er); } catch (Exception e) { MessageBox.Show(e.ToString()); } } /// <summary> ///读取Socket 套接字 /// </summary> /// <param name="client"></param> private static void Receive(Socket client) { try { StateObjcet state = new StateObjcet(); state.workSocket=client; client.BeginReceive(state.buffer,0,StateObjcet.BufferSize,0,new AsyncCallback(ReceiveCallback),state); }catch(Exception e) { MessageBox.Show(e.ToString()); } } /// <summary> /// 异步挂起 /// </summary> /// <param name="er"></param> private static void ReceiveCallback(IAsyncResult er) { try { //异步操作获取用户定义信息 StateObjcet state = (StateObjcet)er.AsyncState; Socket client = state.workSocket; //结束挂起异步读取 int bytebuffer = client.EndReceive(er); if (bytebuffer > 0) { UpdateList(new Form1(), new EventArgs(), Encoding.ASCII.GetString(state.buffer, 0, bytebuffer)); state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytebuffer)); client.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } else { if (state.sb.Length > 1) { response = state.sb.ToString(); } receiveDone.Set(); client.Close(); } } catch (Exception e) { MessageBox.Show(e.ToString()); } } private void button2_Click(object sender, EventArgs e) { if (richTextBox2.Text.Trim() == "") return; else if (richTextBox2.Text.Trim().ToLower() == "clear()") { richTextBox1.Clear(); richTextBox2.Text = ""; return; } else if (Regex.IsMatch(richTextBox2.Text.Trim().ToLower(), @"^[zoom(]+[\d]+[)]$")) { string str = richTextBox2.Text.ToLower(); int size = Convert.ToInt32(str.Substring(str.LastIndexOf('(') + 1, str.IndexOf(')') - str.LastIndexOf('(') - 1)); richTextBox1.Font = new Font("宋体", size, FontStyle.Bold); return; } try { Byte[] bs; string user = null; if (txtUser.Text.Trim() == "在此输入你的名字" || txtUser.Text.Trim() == "") { user = "我"; bs = Encoding.Unicode.GetBytes(string.Format("对方说:({0})\r\n{1}\r\n", DateTime.Now.ToString(),richTextBox2.Text.Trim())); } else { bs = Encoding.Unicode.GetBytes(string.Format("{0}说:({1})\r\n{2}\r\n", txtUser.Text.Trim(),DateTime.Now.ToString(),richTextBox2.Text.Trim())); user = txtUser.Text.Trim(); } bs = System.Text.Encoding.UTF8.GetBytes(richTextBox2.Text); //发现UTF8可支持中文,就用之 socket.BeginSend(bs, 0, bs.Length, 0, new AsyncCallback(SendCallback), socket); txt = string.Format("{0}说:({1})\r\n{2}\r\n", user, DateTime.Now.ToString(), richTextBox2.Text.Trim()); int tempLen = richTextBox1.Text.Length; richTextBox1.AppendText(txt); richTextBox1.Select(tempLen, txt.Length); richTextBox1.SelectionFont = new Font("宋体", 10); richTextBox1.SelectionColor = Color.Red; richTextBox2.Clear(); } catch(Exception ex) { MessageBox.Show("连接尚未建立!无法发送数据!" + ex.Message); } } private void getlocalip(string myip) //dw20150214 { // 获取到本机IP //自动获取到本机电脑端口 IP = IPAddress.Parse(txtIP.Text.Trim()); int point = Convert.ToInt32(txtPoint.Text.Trim()); endpoint = new IPEndPoint(IP, point); } private void Form1_Load(object sender, EventArgs e) { getlocalip(GetServerIP().ToString()); //dw20150214 //建立Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } private void txtIP_TextChanged(object sender, EventArgs e) { } private void TheradScoket() { Thread TempThread; //开启接收线程 TempThread = new Thread(new ThreadStart(this.ToConnect)); TempThread.IsBackground = true;//设置为后台线程 TempThread.Start(); TempThread.Abort();//关闭线程 Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //关闭套接字 client.Close(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { TheradScoket(); // socket.Close(); } } }

ServerSocket服务端如何向多个Socket客户端发送同一个数据?

利用线程是多个Socket客户端连接到ServerSocket服务端,但是怎么让ServerSocket服务端向所有的客户端发送同一个数据?

socket技术客户端发送消息服务器为什么收不到?

服务器: package com.ouc.textmyserversocket.main; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new ServerListener().start(); } } package com.ouc.textmyserversocket.main; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class ServerListener extends Thread { public void run(){ try { ServerSocket serverSocket = new ServerSocket(54454); while(true){ Socket socket = serverSocket.accept(); JOptionPane.showMessageDialog(null, "链接54454端口"); chatSocket cs = new chatSocket(socket); cs.start(); chatManager.getchatManager().add(cs); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } package com.ouc.textmyserversocket.main; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; public class chatSocket extends Thread { Socket socket; public chatSocket(Socket s){ this.socket = s; } public void out(String out){ try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write(out); bw.flush(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run(){ try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); String line = null; while((line = br.readLine())!=null){ chatManager.getchatManager().publish(this,line); } br.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }package com.ouc.textmyserversocket.main; import java.util.Vector; public class chatManager { private chatManager (){}; private final static chatManager cm = new chatManager(); public static chatManager getchatManager(){ return cm; } Vector<chatSocket> vector = new Vector<chatSocket> (); public void add(chatSocket cs){ vector.add(cs); } public void publish(chatSocket cs,String out ){ for(int i=0;i<vector.size();i++){ chatSocket cschatSocket = vector.get(i); if( !cs.equals(cschatSocket)){ cschatSocket.out(out); } } } } 客户端: package com.example.at; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Xml.Encoding; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { EditText ip; EditText editText; TextView text; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ip = (EditText)findViewById(R.id.ip); editText = (EditText)findViewById(R.id.edit); text = (TextView)findViewById(R.id.text); findViewById(R.id.connect).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub connect(); } }); findViewById(R.id.send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub send(); } }); } Socket socket = null; BufferedReader reader = null; BufferedWriter writer = null; public void connect(){ AsyncTask<Void,String,Void> read = new AsyncTask<Void,String,Void>(){ @Override protected Void doInBackground(Void... arg0) { // TODO Auto-generated method stub try { socket = new Socket(ip.getText().toString(),54454); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); } catch (UnknownHostException e) { Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show(); } try { String line; while((line = reader.readLine())!= null){ publishProgress(line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(String... values) { // TODO Auto-generated method stub if(values[0].equals("@success")){ Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show(); } text.append("别人说:"+values[0]+"\r\n"); super.onProgressUpdate(values); } }; read.execute(); } public void send(){ try { text.append("我说:"+editText.getText().toString()+"\r\n"); writer.write(editText.getText().toString()+"\r\n"); writer.flush(); editText.setText(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

用c#和websocket做服务器端主动发消息给web客户端?

求教各位大神,用c#怎么写websocket实现服务器端主动发消息给web客户端的功能。就比如数据库的数据更新了,服务器就主动发更新的消息给客户端。求代码啊

C#通过Socket实现多文件传输

大概需求是客户端发送一个xml文件名给服务器,服务器返回xml文件。这一步没问题。 后面客户端需要解析xml文件,根据解析出的文件名,去服务器获取指定文件。现在问题是第一次服务器发送xml文件之后就侦听不到客户端后面的请求了 服务端代码: ``` #region 窗体加载 private void Form1_Load(object sender, EventArgs e) { Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//Socket设置、IPv4、Stream类型套接字、TCP协议 IPAddress ip = IPAddress.Any;//获取本机IP IPEndPoint point = new IPEndPoint(ip, 18002);//设置IP和端口 socketWatch.Bind(point);//绑定端口 memoEdit1.Text = "开始侦听..."; socketWatch.Listen(100);//最大连接数 Thread th = new Thread(SendFileFuncssss);//创建新线程 th.Start(socketWatch);//启动线程 th.IsBackground = true;//设置后台运行线程 } #endregion #region 根据客户端传输文件名发送指定文件 public void SendFileFuncssss(object obj) { Socket socket = obj as Socket; while (true) { Socket socketServices = socket.Accept(); byte[] buffer = new byte[1024]; int num = socketServices.Receive(buffer);//接收到字节数 string str = Encoding.UTF8.GetString(buffer, 1, num - 1);//接收到字符串 if (buffer[0] == 0)//表示接收到的是消息数据 { TxtAddContent(socketServices.RemoteEndPoint + "连接成功"); string FileName = str; if (FileName.Equals("AutoUpdater.xml"))//获取xml配置文件 { //发送XML文件到客户端 using (FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + FileName, FileMode.Open)) { byte[] arrFile = new byte[1024 * 1024 * 5]; int length = fs.Read(arrFile, 0, arrFile.Length); byte[] arrFileSend = new byte[length + 1]; arrFileSend[0] = 1; // 用来表示发送的是xml文件数据 Buffer.BlockCopy(arrFile, 0, arrFileSend, 1, length); socketServices.Send(arrFileSend);// 发送数据到客户端 } } if (!FileName.Equals("AutoUpdater.xml")) { //发送更新文件到客户端 using (FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\FileFolder\\" + FileName, FileMode.Open)) { byte[] arrFile = new byte[1024 * 1024 * 50]; int length = fs.Read(arrFile, 0, arrFile.Length);//获取文件长度 byte[] arrFileSend = new byte[length + 1]; arrFileSend[0] = 1; // 用来表示发送的是xml文件数据 Buffer.BlockCopy(arrFile, 0, arrFileSend, 1, length); socketServices.Send(arrFileSend);// 发送数据到服务端 } } } } } #endregion ``` 客户端代码: ``` Socket socketClient = obj as Socket; socketClient.Connect(ipEndPoint); #region 修改本地文件名称 string Oldpath = AppDomain.CurrentDomain.BaseDirectory + "AutoUpdater.xml";//修改前名称 string Newpath = AppDomain.CurrentDomain.BaseDirectory + "AutoUpdater_Back.xml";//修改后名称 if (File.Exists(Oldpath)) { File.Delete(Newpath); File.Move(Oldpath, Newpath);//更改文件名 } #endregion if (socketClient.Connected) { try { TxtReceiveAddContent("连接成功"); //发送链接成功提示 byte[] arrMsg = Encoding.UTF8.GetBytes("AutoUpdater.xml"); byte[] arrSendMsg = new byte[arrMsg.Length + 1];//加一位标识用于表示是文字消息还是文件 arrSendMsg[0] = 0; // 用来表示发送的是消息数据 Buffer.BlockCopy(arrMsg, 0, arrSendMsg, 1, arrMsg.Length); socketClient.Send(arrSendMsg); //获取文件 string dirPath = Application.StartupPath; byte[] buffer = new byte[1024 * 1024 * 5]; int lenght = socketClient.Receive(buffer); if (buffer[0] == 1) { using (FileStream fs = new FileStream(dirPath + "\\AutoUpdater.xml", FileMode.Create)) { fs.Write(buffer, 1, lenght - 1); } TxtReceiveAddContent("配置文件接收成功:AutoUpdater.xml");//追加提示备注 } #region 获取XML里需要更新的文件和需要删除的文件 List<string> updatelist = new List<string>();//需要更新的文件集合 List<string> deletelist = new List<string>();//需要更新的文件集合 //获取历史xml文件更新时间以及更新版本 XDocument Olddocument = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "AutoUpdater_Back.xml"); //获取到XML的根元素进行操作 XElement Oldroot = Olddocument.Root; XElement Oldele = Oldroot.Element("UpdateInfo"); //获取旧更新时间标签的值 XElement OldUpdateTime = Oldele.Element("UpdateTime"); //获取旧版本号标签的值 XElement OldVersion = Oldele.Element("Version"); //获取最新xml文件更新时间以及更新版本 XDocument Newdocument = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "AutoUpdater.xml"); //获取到XML的根元素进行操作 XElement Newroot = Newdocument.Root; XElement Newele = Newroot.Element("UpdateInfo"); //获取旧更新时间标签的值 XElement NewUpdateTime = Newele.Element("UpdateTime"); //获取旧版本号标签的值 XElement NewVersion = Newele.Element("Version"); if (NewUpdateTime != OldUpdateTime || NewVersion != OldVersion) { //获取需要更新的文件列表 XElement NewUpList = Newroot.Element("UpdateList"); IEnumerable<XElement> UpList = NewUpList.Elements(); foreach (XElement item in UpList) { updatelist.Add(item.Value); } //获取需要删除的文件列表 XElement NewDelList = Newroot.Element("DeleteList"); IEnumerable<XElement> DelList = NewDelList.Elements(); foreach (XElement item in DelList) { deletelist.Add(item.Value); } } #endregion #region 循环获取更新文件 for (int i = 0; i < updatelist.Count; i++) { //发送链接成功提示 byte[] FileName = Encoding.UTF8.GetBytes(updatelist[i]); byte[] SendFileName = new byte[FileName.Length + 1];//加一位标识用于表示是文字消息还是文件 SendFileName[0] = 0; // 用来表示发送的是消息数据 Buffer.BlockCopy(FileName, 0, SendFileName, 1, FileName.Length); socketClient.Send(SendFileName); //获取文件 string FilePath = Application.StartupPath + "\\WebFile"; byte[] bufferByFile = new byte[1024 * 1024 * 50]; int lenghtByFile = socketClient.Receive(bufferByFile); if (bufferByFile[0] == 1) { using (FileStream fs = new FileStream(FilePath + "\\" + updatelist[i], FileMode.Create)) { fs.Write(bufferByFile, 1, lenghtByFile - 1); } TxtReceiveAddContent("文件接收成功:" + updatelist[i]); } } #endregion #region 循环删除指定文件 for (int i = 0; i < deletelist.Count; i++) { try { string path = AppDomain.CurrentDomain.BaseDirectory + "\\WebFile\\" + deletelist[i]; File.Delete(path); TxtReceiveAddContent("删除文件[" + deletelist[i] + "]成功"); } catch (Exception) { TxtReceiveAddContent("删除文件[" + deletelist[i] + "]失败"); continue; } } #endregion } catch (Exception ex) { File.Move(Newpath, Oldpath);//连接失败,还原文件名 MessageBox.Show(ex.ToString()); throw; } ``` 调试在客户端进循环的时候服务端侦听不到了 刚接触socket,多谢大佬们解答

关于socket客户端发送数据正常,而服务器收到的数据为空

我写了一个简单的聊天程序,服务器和客户端接受发送数据都通过定义的同一个结构体,为什么在本机测试,开两个终端都没有问题,客户端和服务器分开在不同的电脑上测试时,客户端发送数据正常,而此时服务器收到的结构体里的数据为空是怎么回事?服务器用的epoll单线程,客户端用的双线程

socket双向通信,为什么服务器只能接收一次客户端发送的消息

如题,双向的socket通信,但是服务端只能接收一次客户端发送的请求消息就终止在accept状态,请问是哪里出了问题了。 客户端程序如下: [code="java"]package com.snail.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class SocketClient { public static void main(String[] args) { Socket socket = null; PrintWriter printWriter = null; BufferedReader bufferedReader = null; try { socket = new Socket(InetAddress.getLocalHost(), 2123); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); printWriter = new PrintWriter(socket.getOutputStream(), true); int i=1; while (true) { System.out.println("input " + i); BufferedReader bufIn = new BufferedReader(new InputStreamReader(System.in)); String result = bufIn.readLine(); System.out.println("client input data " + i++ + ": " + result); printWriter.println(result); printWriter.flush(); String serverStr = bufferedReader.readLine(); System.out.println("Server : " + serverStr);// 在标准输出上打印从Server读入的字符串 if (result.equals("end")) { bufIn.close(); break; } } printWriter.close(); bufferedReader.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(socket != null) { try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(printWriter != null) { printWriter.close(); } if(bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }[/code] 服务端代码如下: [code="java"]package com.snail.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) { ServerSocket serverSocket = null; Socket socket = null; BufferedReader bufferedReader = null; PrintWriter printWriter = null; try { serverSocket = new ServerSocket(2123); int i = 1; while (true) { System.out.println("accept " + i); socket = serverSocket.accept(); System.out.println("begin " + i++ + ": " + "accept"); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); printWriter = new PrintWriter(socket.getOutputStream(), true); // 获取从客户端读入的字符串 String result = bufferedReader.readLine(); System.out.println("Client say : " + result); if ("bye".equals(result)) { System.out.println("Client say : " + result); printWriter = new PrintWriter(socket.getOutputStream()); printWriter.print("hello Client, I am Server! bye-bye."); printWriter.flush(); break; } // 由Socket对象得到输出流,并构造PrintWriter对象 printWriter.println("hello Client, I am Server!"); printWriter.flush(); } printWriter.close(); bufferedReader.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (serverSocket != null) { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } if (printWriter != null) { printWriter.close(); } if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } [/code] 请大神指教下

socket客户端关闭,服务端怎么处理

socket客户端关闭了,服务端会报错,怎么让服务端任然正常运行?

C# IOCP模式下服务器主动发送消息

http://blog.csdn.net/zhujunxxxxx/article/details/43573879 服务器端代码是参考这篇帖子的。 我想要实现,按下按钮,然后往所有当前连接上的客户端发送数据。 但是从SocketAsyncEventArgsPool 对象池里pop一个SocketAsyncEventArgs e,然后发送数据。 发送函数里的Socket s = e.AcceptSocket会出现未实例化的错误。 发送函数如下 public void Send(SocketAsyncEventArgs e, byte[] data) { if (e.SocketError == SocketError.Success) { Socket s = e.AcceptSocket; if (s.Connected) { Array.Copy(data, 0, e.Buffer, 0, data.Length); if (!s.SendAsync(e)) { ProcessSend(e); } else { CloseClientSocket(e); } } } } 这原因是什么你

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

广工操作系统课程设计(文档+代码+可执行文件)

实现作业调度(先来先服务)、进程调度功能(时间片轮转) 实现内存管理功能(连续分配)。 实现文件系统功能(选作) 这些功能要有机地连接起来

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

apache-jmeter-5.1.1(Requires Java 8+).zip

。Apache JMeter 5.1.1 (Requires Java 8+),需要jdk8以上的版本。

数通HCNP中文理论全套教材.rar

内涵HCNP-IENP中文理论书-内文,

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

DDR5_Draft_Spec_Rev05c.pdf

DDR5 spec

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

相关热词 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行 c# 循环给数组插入数据 c# 多线程死锁的例子 c# 钉钉读取员工排班 c# label 不显示 c#裁剪影像 c#工作进程更新ui
立即提问