多个线程调用一个连接好的socket进行send需要lock吗? [问题点数:40分,结帖人hwbox]

Bbs5
本版专家分:4553
结帖率 100%
Bbs5
本版专家分:3956
Bbs5
本版专家分:4553
Bbs5
本版专家分:4553
Bbs7
本版专家分:22674
版主
Blank
优秀版主 2016年10月优秀小版主
优秀小版主
Bbs5
本版专家分:4553
Bbs3
本版专家分:769
Bbs5
本版专家分:3478
Bbs5
本版专家分:4553
Bbs5
本版专家分:4553
Bbs8
本版专家分:36114
Bbs7
本版专家分:22674
版主
Blank
优秀版主 2016年10月优秀小版主
优秀小版主
Bbs5
本版专家分:4553
Bbs8
本版专家分:36114
Bbs5
本版专家分:4553
Bbs8
本版专家分:36114
Bbs5
本版专家分:4553
Bbs8
本版专家分:36114
Bbs5
本版专家分:4553
Bbs8
本版专家分:36114
一个socket send的问题
现在我程序里面有两个<em>线程</em>rnthreadFunc1()rnrn..................rnpthread_mutex_<em>lock</em>(&mutex);rn..........rnbuf[i]=12333;rnpthread_mutex_un<em>lock</em>(&mutex);rnrnrn<em>线程</em>1负责往BUFF里面存放数据rnthreadFunc2()rnrnpthread_mutex_<em>lock</em>(&mutex);rn..........rn<em>send</em>(<em>socket</em>fd,buf,len,0);rnpthread_mutex_un<em>lock</em>(&mutex);rnrn<em>线程</em>2负责把BUFF里的数据发出去rnrn两边采用了互斥锁来保证数据安全。rnrn现在的问题是,当网络不好时,<em>send</em>函数把缓存里的数据堆满后,阻塞在这里rn而互斥锁没有解锁,导致整个程序停掉了rn求解。rnrnrn
多个线程调用问题
第一次接触<em>线程</em>问题,问问大家:rn 在程序中涉及到<em>调用</em><em>多个</em>接口函数的问题,我想问的是:在<em>一个</em><em>线程</em>文件中写<em>多个</em>函数或过程,然后互不相干的<em>调用</em>;但是我发现在使用<em>线程</em>时是用的<em>线程</em>文件名(目前我见到的是这样)而不是函数或过程,这样达不到目的,有其他的使用方法吗?或是要写<em>多个</em><em>线程</em>文件,请熟悉的朋友支个招吧 !!rn 先谢过大家了!!
如何另开一个线程进行socket监听
rn用的是MFC,多谢,急rn小弟初次用,最好有详细的说明和源码
一个客户端能连多个服务器吗?
我有<em>一个</em>服务器S,有两个客户端CA,CB.现在我想在CA,CB都连上S的状态上,用CA再创建服务器(用的是不同的端口号),想再用CB连CA,结果程序运行错误.rnrn不知道问题出在哪儿啊?还是根本就不能用客户端连<em>多个</em>服务器,或是客户端不能再做服务器,还是端口号的问题!请高手指教!
面试题,socket进行send操作始终send不出去该怎么办?
我的回答是,在应用层弄<em>一个</em>缓冲区,先把数据放入这个缓冲区,再从这个缓冲区写入<em>socket</em>。每次当<em>socket</em>可写时就从这个缓冲区里取走并发出,如果应用层的缓冲区满了就设置<em>一个</em>定时器,比如一分钟,如果定时器超时后应用层缓冲区还是满的,就断开链接。rnrn感觉我的回答对方并不满意,而且好多次都被这么问到,请问各位大牛,有更好的解决办法么?
socket 里面的send和recv的调用有先后顺序的吗
刚刚试了一下服务器<em>线程</em>先<em>调用</em>rn。。。。。。rn。。。。。。。。rnwhile(1)rnrn ..........rn <em>send</em>();rn recv();rn.......rnrnrn客户端rnrn。。。。。。。。。。。。。。rn。。。。。。。。。。。rnrecv()rn<em>send</em>()rn....rn......rnrn[color=#FF0000]上述的情况是不行的[/color]rnrn但是如果是如下<em>调用</em>就没问题rnrn。。。。。。rn。。。。。。。。rnwhile(1)rnrn ..........rn recv();rn <em>send</em>();rn.......rnrnrn客户端rnrn。。。。。。。。。。。。。。rn。。。。。。。。。。。rn<em>send</em>()rnrecv()rnrn....rn......rnrnrn请高手解答!谢谢rn
如何进行lock 线程问题...在线等
多<em>线程</em>处理 A1 A2 A3 的长度不同....... 如何解决这个问题? <em>lock</em> 用的不对?????在线等 急啊rn[code=csharp]using System;rnusing System.Collections.Generic;rnusing System.Linq;rnusing System.Text;rnusing System.Threading;rnrnnamespace ConsoleApplication1rnrn class Programrn rn static void Main(string[] args)rn rn StringBuilder A1 = new StringBuilder();rn StringBuilder A2 = new StringBuilder();rn StringBuilder A3 = new StringBuilder();rnrn List arrThread = new List();rn int forCount = 50;rn for (int i = 0; i < forCount; i++)rn rn Thread_Proc proc = new Thread_Proc(i, ref A1, ref A2, ref A3);rn Thread t = new Thread(proc.Do_Thread);rn t.Start();rn arrThread.Add(t);rn rnrn foreach (var item in arrThread)rn while (item.IsAlive)rn Thread.Sleep(10);rnrn //A1 A2 A3 的 Length 为什么不相同..rn Console.WriteLine("A1:" + A1.ToString().Substring(1).Split(',').Length);rn Console.WriteLine("A2:" + A2.ToString().Substring(1).Split(';').Length);rn Console.WriteLine("A3:" + A3.ToString().Substring(1).Split('^').Length);rn Console.ReadLine();rn rn rnrn class Thread_Procrn rn public Thread_Proc(int currIndex, ref StringBuilder B1, ref StringBuilder B2, ref StringBuilder B3)rn rn this._b1 = B1;rn this._b2 = B2;rn this._b3 = B3;rn this._currIndex = currIndex;rn rnrn private StringBuilder _b1;rn private StringBuilder _b2;rn private StringBuilder _b3;rn private int _currIndex;rnrn public void Do_Thread()rn rn string num = DateTime.Now.ToString("yyyyMMddHHmmssffff") + _currIndex;rnrn for (int i = 0; i < 10; i++)rn <em>lock</em> (this)rn thisAppend(num);rn rnrn private void thisAppend(string numOrder)rn rn _b1.Append("," + numOrder);rn _b2.Append(";" + numOrder);rn _b3.Append("^" + numOrder);rn rn rnrn[/code]rnrn多<em>线程</em>处理 A1 A2 A3 的长度不同....... 如何解决这个问题? <em>lock</em> 用的不对?????在线等 急啊
请问可以在两个线程里同时调用recv和send吗?
如题.
一个线程情况下的数据库操作是否需要线程lock的问题
在做<em>一个</em>程序,executorService动态产生<em>多个</em>Runnable<em>线程</em>rn每个<em>线程</em>都有可能执行Sqlserver写入操作,现在sqlserver只有<em>一个</em>连接rn也就是<em>多个</em><em>线程</em>公用<em>一个</em>sqlserver连接rn这种情况下<em>线程</em>在对sqlserver写入的时候<em>需要</em>先<em>lock</em>,等执行完后再un<em>lock</em>吗?rnrn请各位高手指教,谢谢
调用socket send()返回失败是怎么回事?
我的代码是这样写的:rn1、生成<em>一个</em><em>socket</em>rn<em>socket</em>1=<em>socket</em>(AF_INET,SOCK_DGRAM,0);rn2、建立<em>socket</em>与服务器的连接rnconnect(<em>socket</em>1, (const sockaddr *)&server, len) ;//申请UDP套接字rn3、发送数据rnwhile(buf_len) rnrn <em>send</em>( <em>socket</em>1, <em>send</em>buf, bytes, 0 );//发送rtp包rnrnrn问题的现象是:对<em>send</em>()函数的<em>调用</em>一次成功一次失败,成功时返回发送的字节数,失败时返回-1.请问为何会出现<em>send</em>失败的情况?多谢各位大侠!
socket重复调用send要怎么做?
第一次<em>调用</em>可以,第二次<em>调用</em>Receive不到东西rn这个项目只能用<em>socket</em>,因为<em>需要</em>用到<em>socket</em>5代理rn部分代码rn Function SocketRead(ByVal url As String, ByVal con As Socket) As Stringrn Dim ascii As Encoding = Encoding.ASCIIrn Dim request As String = urlrn Dim bytesSent As [Byte]() = ascii.GetBytes(request)rn Dim bytesReceived(255) As [Byte]rnrn Dim s As Socket = conrn If s Is Nothing Thenrn Return "Connection failed"rn End Ifrn s.Send(bytesSent, bytesSent.Length, 0)rn Dim bytes As Int32rn Dim page As [String] = ""rn Dorn bytes = s.Receive(bytesReceived, bytesReceived.Length, 0)rn page = page + Encoding.UTF8.GetString(bytesReceived, 0, bytes)rn Loop While bytes > 0rn Return pagern End Function
请问能在两个线程中分别同时对一个Socket进行Send和Receive操作吗?这样会有问题吗?
如果这样有问题该怎么解决?rn
异步SOCKET SEND函数是异步的吗
如果SOCKET是异步的,并且发送给SEND函数的BUF参数是<em>一个</em>指针,SEND函数返回后,我立刻把这个BUF清空,会影响到SEND函数发送数据不正常不
多个线程调用一个dll的同一个接口
程序加载了<em>一个</em>dll,之后该程序的<em>多个</em><em>线程</em><em>调用</em><em>一个</em>dll的同<em>一个</em>接口。rn<em>一个</em><em>线程</em><em>调用</em>dll的这个接口之后,这个接口还没有返回,另<em>一个</em>个<em>线程</em>又<em>调用</em>了这个接口,那么dll中,是处理怎么第二个<em>调用</em>的?是让第二个<em>调用</em>等待,还是和第<em>一个</em>接口并行<em>调用</em>?
多个线程调用一个函数的问题
我在程序中建立了两个<em>线程</em>用于接收两个<em>socket</em>发送过来的信息,接收到信息后<em>调用</em>同<em>一个</em>函数<em>进行</em>处理。rn现在的问题是连接<em>一个</em><em>socket</em>时没有问题,连接两个的时候有很大的机会出错,我简单的测试了一下,感觉是同时<em>调用</em><em>一个</em>处理函数产生的问题。rn在这个函数中用到了两个全局的变量。rnrn请教一下怎么修改呢?
如何实现多个线程调用一个窗体
如何实现<em>多个</em><em>线程</em><em>调用</em><em>一个</em>窗体?多谢各位高手指教
多个线程能监听一个端口吗?
如果这个端口发送数据,<em>多个</em><em>线程</em>能同时接收吗? 代码该怎么写。。。。
一个线程多个句柄吗?
我好像网上看到的,说<em>一个</em><em>线程</em>有<em>多个</em>句柄,每个句柄的操作权限不同。rn那么API creatthread返回的那个handle是哪个呢?
一个很菜的问题,线程需要释放吗?
typern TpainterThread=class(TThread)rn protectedrn procedure Execute;override;rn privatern threadaguge:integer;rn publicrnrnend;rn tpainterthread.Create(false);rnrn它的OnTerminate事件有什么用呢?rn
两个线程同时调用Send会怎样
有可能导致程序崩溃吗?
一个客户端需要2个线程吗?
如果采用非阻塞模式,是不是服务器端要给每个客户端开两个<em>线程</em>?<em>一个</em>recv(),<em>一个</em><em>send</em>()...否则如果recv(),一直没有消息的话不是不能返回?这时要想发消息怎么办?rn有没有<em>一个</em>函数可以设定最高等待时间?,recv()超过一定时间收不到消息就自动返回?
一个SOCKET连接能否同时进行接收(receive)和发送(send)???
我想实现两个<em>线程</em>,<em>一个</em><em>socket</em>全局变量,rn<em>一个</em><em>线程</em><em>进行</em>接收,rn<em>一个</em><em>线程</em><em>进行</em>发送,rn即对<em>socket</em>存在同时<em>进行</em>接收和发送,请问是否有问题???rn
一个线程开始以后需要退出吗?
如果<em>需要</em>,不退出会出现什么情况?
【JAVA-线程线程的同步Lock
1实例化ReentrantLock private ReentrantLock <em>lock</em> =new ReentrantLock(); 2.把<em>需要</em> 控制的代码块 放到try-finally中 在try里的第一句代码 为<em>lock</em>.<em>lock</em>(); 在finally里的代码为 <em>lock</em>.un<em>lock</em>() try { <em>lock</em>.<em>lock</em>(); } finally { <em>lock</em>.un<em>lock</em>(); } ...
使用lock同步线程,一个线程lock后执行操作过程中被杀掉,它会释放lock的资源吗?
比如<em>一个</em>函数是这样实现的:rnvoid func()rnrn <em>lock</em>(obj)rn rn //<em>一个</em>耗时比较长的操作rn rnrnrn然后会有<em>多个</em><em>线程</em>来<em>调用</em>这个函数,当<em>一个</em><em>线程</em>执行"<em>一个</em>耗时比较长的操作"时,还没来得及执行完就被杀掉了,那么它会释放<em>lock</em>的资源吗?其它的<em>线程</em>还会进入到这个函数吗?rn
多个线程顺序进行和轮询进行的问题
废话不说了,晚上看到<em>一个</em>问题,<em>需要</em>ABC<em>线程</em>,能依次打印ABC(<em>需要</em>循环的)? 之前看能没有看到它<em>需要</em>循环打出这些,只是觉得他要顺序打出,所以就用了join 这个关键字做了<em>一个</em>demo; package com.zeng.thread; /** * 实现三个<em>线程</em>ABC,按照顺序输出ABC * 方案一 * * @author leo-zeng * */ public class T
多个线程对同一个文件进行写操作是否需要加锁?
实现多<em>线程</em>下载同<em>一个</em>文件的时候,每个<em>线程</em>只下载文件的一部分,各自新建<em>一个</em>RandomAccessFile对象向同<em>一个</em>文件里写数据,这时每个<em>线程</em>写入的数据没有交集,是否<em>需要</em>加锁同步?<em>线程</em>对象的run()方法的伪代码如下:rn[code=java]public class DownloadThread extends Threadrnrn @Overridern public void run() rn RandomAccessFile randomAccessFile = new RandomAccessFile("abc.exe", "rwd");rn randomAccessFile.seek(position); //每个<em>线程</em>的position都不一样rn randomAccessFile.write(data, 0, length);rn rn [/code]
在网络编程中可以在多个线程中使用同一个socket吗?
我在做<em>一个</em>UDP发送程序 由于速度不够 所以准备开多<em>线程</em>来<em>进行</em>发送 想请教的是可以在<em>多个</em><em>线程</em>中只用<em>一个</em><em>socket</em>吗?rn也就是<em>socket</em>可以复用吗,比如<em>一个</em><em>线程</em>在用这个<em>socket</em>的时候,另<em>一个</em><em>线程</em>也用这个<em>socket</em>会出现什么样的情况ne?rnrn如果用<em>一个</em><em>socket</em>的好处是可以在接收端只开<em>一个</em><em>线程</em>接收就够了,不用开<em>多个</em><em>线程</em>,也不用考虑同步的问题。。。
一个socket多个线程中使用容易出现问题吗?
如题。
socket系统调用需要root权限吗?
看Unix网络编程上面的tracerout程序,用了下列<em>一个</em>函数:traceloop,其中用如下wrap函数<em>进行</em>系统<em>调用</em>:rnrnrecvfd = Socket(pr->sa<em>send</em>->sa_family, SOCK_RAW, pr->icmpproto);rnrn我编译出来traceroute程序,然后试着运行,如./traceroute www.csdn.netrnrn但是,提示如下错误:<em>socket</em> error:Operation not permittedrn我上网搜索了一下,有可能是因为这是<em>一个</em>raw报文,<em>socket</em>系统<em>调用</em>产生该报文<em>需要</em>root权限。rnrn但是,为什么现成的linux系统上的traceroute命令不<em>需要</em>root权限?我<em>需要</em>怎么修改该程序,才能够不<em>需要</em>root权限也能够traceroute呢?rnrn谢谢!
线程 socket 需要同步吗?
int retrnsockaddr_in addr;rnaddr.sin_family = AF_INET;rnaddr.sin_port = htons(82);rnaddr.sin_addr.S_un.S_addr = INADDR_ANY;rnret = bind(server_sk,(sockaddr*)&addr,sizeof(addr));rnret = listen(server_sk,2);rnSOCKET s = accept(server_sk,NULL,NULL);rnrn通过以上代码我得到s(SOCKET),我想在<em>多个</em><em>线程</em>中使用,是否会产生资源冲突,是否<em>需要</em>在代码中实现同步(Synchronization)。rnrn请赐教!!!
一个端口绑定多个socket
<em>一个</em>文件传输功能, 客户端与客户端之间通过TCP<em>进行</em>文件传输. 我是这样做的: 每当客户端同意接受<em>一个</em>文件,就新建<em>一个</em>接收文件的<em>线程</em>recvthread,把文件保存路径做为参数传递给该<em>线程</em>. 在recvthread中,建立<em>一个</em>recv<em>socket</em>,Listen与bind到了9100端口,而在发送方就建立<em>一个</em><em>send</em>thread, 在<em>send</em>thread中,只是简单的新建<em>一个</em><em>send</em><em>socket</em>,并connect接收方的IP与9100端口. 假如有多人同时发送文件,同时接受<em>多个</em>文件的时候,可能会有<em>多个</em>recvthread,而且将会有<em>多个</em><em>socket</em>监听并绑定到9100端口, 会不会出现问题? rn另外,connect函数,<em>send</em>函数,recv函数,都可能返回SOCKET_ERROR,但是我不敢做if判断, 是不是返回一次ERROR就一定connect不上呢? 需不<em>需要</em>做<em>一个</em>循环,不停去connect呢? rnrnPS:有客户端又有服务器真难调试,VC一次只能调试<em>一个</em>程序,要不停切换来切换去,不知道各位是怎么调试的?
怎样判断打印机是否连接好
怎样判断打印机是否连<em>接好</em>?
recv/send有必要非独立出一个线程吗?
感觉<em>send</em>/recv 仅仅是放到缓冲区而已。输入对内存的操作,还算不上是I/O级的。没必要非得独立出<em>一个</em><em>线程</em>。如果数据量不大,不总是让缓冲区满着,就没必要独立出一<em>线程</em>来。rn不知道这个看法对吗?
一个对象的多个synchronized方法多个线程调用
今天遇到<em>一个</em>笔试题,说的是:当<em>一个</em><em>线程</em>进入<em>一个</em>对象的synchronized方法之后,其它<em>线程</em>能否进入该对象的其他方法? 答:很明显当其它方法是非synchronized方法时,<em>调用</em>是不受影响的,但当其它方法也是synchronized方法时呢?接下来我们<em>进行</em>实验验证: class Test{ public synchronized void synchronizedMethod...
请问线程里能生成多个线程吗?
能先个这样的并行程序吗,<em>多个</em><em>线程</em>并行,其中的每个<em>线程</em>有有<em>多个</em><em>线程</em>。rn不知道叙述清楚了没
socket服务器问题,怎么连多个客户端
问题描述:rn 我现在要做<em>一个</em><em>socket</em>的服务器程序,接收很多客户端来的数据,每个客户端设备定时一分钟往服务器发送数据,数据的类型有很多种,服务器上将收到的数据<em>进行</em>组织,保存成一定的格式的文件,客户端的个数没有确定,怎么实现?rnrnrn我的想法:rn 虽然每分钟客户端向服务器传递各种数据,但是数据量很小,我的想法是在服务器上建立<em>一个</em><em>socket</em> ,各个客户端都和这个<em>socket</em>连接,每连接到<em>一个</em>客户端,就开<em>一个</em><em>线程</em> 单独处理这个客户端的数据,考虑到客户端必须容易动态加入,且要判断客户端掉线的情况。rnrn我这个想法怎么实现呢?谢谢大家。
两个线程一个socket同时分别进行recv和send,会怎么样?
RT,会引发异常么?
两个线程同时使用一个socket进行send,会出现什么问题?
请教关于<em>socket</em>编程的<em>send</em>函数!(TCP)rnrn今天遇到<em>一个</em>问题,先<em>send</em><em>一个</em>大文件,估计时间比较长,另<em>一个</em><em>线程</em>在这中间想发送另外一段数据,请问直接用这个<em>socket</em><em>进行</em><em>send</em>会出现什么问题,是否会成功?
socket send的返回值
虽然看到很多文章,但是没有确定rnrn<em>send</em>返回的数值是发送到客服端并且在tcp层得到确认之后的值吗?rnrn还是<em>send</em>的返回值只是发送到client的内核缓冲区的可用空间里面之后,就返回了rnrn还有就是,这个数值是否受非阻塞O_NONBLOCK,异步O_ASYNC <em>socket</em>操作的影响,具体怎么影响的那rnrn期待高人解答啊
vc socket send的问题
vc <em>socket</em> <em>send</em>的问题rn在发送端<em>send</em>已经返回了发送的字节数,但是在发送端抓不到包?是什么问题?难倒没有发送成功??
socket send发送数据问题
最近在写<em>socket</em>编程,发现<em>一个</em>问题,在发送数据的时候。用什么方式来发送<em>一个</em>结构体比较安全。rn我现在是用的最简单的方法强制转换,结果倒是正确的,我总觉得会有什么问题,但是没发现问题出现在什么地方,高手们能说说你们是怎样发送<em>一个</em>结构体到服务器的吗?
socketsend和recv出错
sock问题,上午程序还可以发和收字符串,下午改成发送结构不成功,又改成字符串可是不行了,为什么?急!服务器与客户端的初始化<em>socket</em>应该没问题!因发送是成功的!rnrnClient:发rn#define MAX_INFO 100rn char cTemp[MAX_INFO]="florence";rn int nByte = <em>send</em>(m_hSocket, cTemp, 10, 0);rn if ( nByte == SOCKET_ERROR )rn AfxMessageBox("Error occurred during <em>send</em>!");rn//nByte = 100,成功rnrnServer:收 rn#define MAX_INFO 100rnchar cTemp[MAX_INFO]="";rnint j = recv(m_hSocket, cTemp, 10, 0);rnj = GetLastError();rnAfxMessageBox(cTemp);rnrn//rncTemp = "";rn错误号:10057(由于套接字没有连接并且 (当使用<em>一个</em> <em>send</em>to <em>调用</em>发送数据报套接字时) 没有提供地址,发送或接收数据的请求没有被接受。)rn真不知道是什么原因了?留email, 我可以给源代码!riversmall@sina.com
socketsend的问题
<em>socket</em>中当客户区接受到服务区accept消息时,会自动<em>调用</em><em>send</em>,但我不想它自动<em>调用</em>,要怎么做啊??
socketsend和recv
除了发送0个字节外,<em>send</em>什么时候返回值为0啊,好像都碰不到这种情况。rnrecv在udp时,是不是不会出现返回值为0这种情况啊》
linux socketsend 问题
有这样一段函数:rnfor (;;)rnrn [color=#FF0000] printf("buf[RealSend]%d:",RealSend);rn for( j=0;j 1) // Mary add, 20081114rn UnionSystemErrLog("in UnionSendToSocket:: <em>send</em>! Real Send [%d] Expected Send = [%d]\n",rc,len - RealSend);rn if (rc < 0)rn rn return(UnionErrCallingSend);rn rn elsern RealSend += rc;rn if (RealSend > len)rn return(UnionErrCallingSend);rn usleep(5);rn rn elsern rn return(len);rn rn
Socket Send and Receive
收发数据是网络编程的主题,在套接字上收发数据我们可以使用<em>send</em>和recv,当然还有Winsock2的WSASend和WSARecv。我们这里只讨论<em>send</em>和recv。
Socket Send Receive 问题
CSocket Send代码:rnrn UpdateData();//从编辑框获取数据m_strrn int ilen = m_str.GetLength();rn int nLen = m_<em>socket</em>Con.Send(m_strMsg,iLen);rn if(nLen != SOCKET_ERROR)rn rn //Do some UI Workrn rnrnrnCSocket Receive代码rn TCHAR buff[4096];rn int nRead;rn nRead = m_<em>socket</em>Con.Receive(buff, 4096); rn if(nRead != SOCKET_ERROR)rn rn buff[nRead] = NULL; //terminate the stringrn CString strTemp(buff);rn // DO SOME UI Workrn rnrn想问为什么环境在Use Multi-Byte Character Set下就能正确接收,但是在Use Unicode Character Set下会出现接收不正确情况。想问下此时应该怎么接收
socket 的Send和 Receive
我在发生数据时候 用List> 传byte[] 把int,string转换的。 在服务端时候 读取 却是合并的 要指定位置分割来获取 可我在发送数据时候 根本据没法确定byte[]的大小 ,请教高手们有没什么方法解决rn代码如下:rnList> byteList = new List>();rnrnSystem.ArraySegment bs = new ArraySegment(System.BitConverter.GetBytes(2));rnrnbyteList.Add(bs);rnrnSystem.ArraySegment bs1 = new ArraySegment(Encoding.UTF8.GetBytes("aa"));rn byteList.Add(bs);rn rn int successSendBtyes = clientSocket.Send(byteList, SocketFlags.None); //发送数据 rnrn--------服务端读取------rnList> byteList = new List>(2);rnrnbyte[] bigBuffer = new byte[1024];rnrnbyteList.Add(new ArraySegment(bigBuffer, 0, 1024));//这里<em>需要</em>位置和个数rnrnbyteList.Add(new ArraySegment(bigBuffer, 0, 1024));rnrnint bytesReceived = clientSocket.Receive(byteList,SocketFlags.None);//接收数据rnrn
socketsend方法问题
客户端创建<em>一个</em>SOCKET,去访问服务器端,第一次发送接收信息都没问题,在接收了服务器返回的信息后,继续使用<em>send</em>方法发送服务器就不能收到了。代码如下rn public Form1()rn rn InitializeComponent();rn rn Socket <em>socket</em>;rn private void Form1_Load(object <em>send</em>er, EventArgs e)rn rn //Thread thread = new Thread(new ThreadStart(BeginListen));rn //thread.Start();rn string ip = "192.168.1.39";rn int port = Convert.ToInt32("8558");rn IPAddress ipaddress = IPAddress.Parse(ip);rn IPEndPoint ipendpoint = new IPEndPoint(ipaddress, port);rn <em>socket</em> = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);rn <em>socket</em>.Connect(ipendpoint);rn byte[] <em>send</em>Str = Encoding.UTF8.GetBytes("开始连接服务器");rn <em>socket</em>.ReceiveTimeout = 1000;rn <em>socket</em>.Send(<em>send</em>Str);rn LastReceive(<em>socket</em>);rn rnrn private void button1_Click(object <em>send</em>er, EventArgs e)rn rn SendMessage(textBox3.Text);rn LastReceive(<em>socket</em>);rn rnrn public void LastReceive(Socket <em>socket</em>)rn rn byte[] recvBytes = new byte[1024];rn int bytes=1;rn bytes = <em>socket</em>.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息rn if (bytes <= 0) return;rn textBox4.Text += Encoding.UTF8.GetString(recvBytes, 0, recvBytes.Length);rn rn public void SendMessage(string mymessage)rn rn byte[] <em>send</em>Str =Encoding.UTF8.GetBytes(mymessage);rn <em>socket</em>.Send(<em>send</em>Str);rn //<em>send</em><em>socket</em>.Shutdown(SocketShutdown.Both);rn //<em>send</em><em>socket</em>.Close();rn
socket send 的疑问
我在窗口中定义了两个编辑框,想要实现通过<em>一个</em>编辑框输入,点击发送,在另外<em>一个</em>编辑框显示的功能,类似QQrn我定义了<em>一个</em>m_conn的套结字初始化都已完毕,但是我<em>调用</em> m_conn.<em>send</em>(buffer,sizeof(struct));(struct 是我定义的小细结构体,buffer为存储数据的数组)时候assert了,跟踪到getDlgItem()处挂掉了。谁帮我看看是什么原因~谢谢了rn
socket send()函数错误
我在linux下<em>进行</em>多<em>线程</em> <em>socket</em> 编程,在使用<em>send</em> 函数时,如果缓冲区能够容纳所发的数据n, 则返回n ;rn 例: num = <em>send</em>(client_fd, filebuffer, n, 0); rn但是 当传输过程中网络断了,<em>send</em>没有返回错误值,也就是除了返回n,没有其它返回错误值,且程序被阻塞,rnrn请问怎么得到<em>send</em>返回的错误值?以结束此<em>线程</em>?
非阻塞socket,阻塞send
由于种种原因,客户端的<em>socket</em>要设置成非阻塞的,主要是connect函数要非阻塞,但是传输数据的时候又希望<em>send</em>和recv是阻塞的,因为实现了多<em>线程</em>,如果非阻塞的话会麻烦点。rn请教高手,能不能单独设置<em>send</em>的阻塞或者非阻塞,还是再设置一次<em>socket</em>的属性?
Windows Socket send 问题。
我用Wondows Socket Version2来实现与FTP服务器的文件上传与下载,当在本地架设FTP服务器时,通信与下载都没有什么问题了,可是当一遇用外网FTP时,在写文件时就出问题了。rnrn当调试文件写时,都能够很快返回,但是只要一不断点,程序就似乎阻在什么地方了。而且现然确定是在文件发送数据时有这个现像。rnrn如果是阻塞在什么地方,那么我在循环发送数据的地方加设临时断点,可是1-2秒后又可以断点调试了。rnrn不知道高手们是否遇到过类似的问题。请求给予解决方案。
关于socket send
现在<em>需要</em>发送文件到服务端rnrn是读整个文件(比如100k)到buffer中后再发送好rn还是边读文件(比如1k)边发送好?
socketsend函数问题!
<em>socket</em>的<em>send</em>函数,发送的数据最大多少呢?好象我发的数据太大后,以后的<em>调用</em>都会失败!
socket recv send 问题
我在evc下开发smartphone 关于<em>socket</em>的程序,关于数据的收发有时候会中断,请问应该怎么处理才好rn那位有开发的经验!
socket send和recv
如何让<em>send</em>出去的数据被recv收到后才发送下一条消息?rn <em>send</em>("17_1");rn <em>send</em>("18_1");rn Sleep(100);rn <em>send</em>("46_1");rn如果中间不加Sleep(100),最后<em>一个</em>数据无法收到,为什么rn用的是TCP
socket中的send函数
<em>send</em>(sockConn,<em>send</em>Buf,strlen(<em>send</em>Buf)+1,0); rn这里,我想<em>send</em>一段加密的数据。rnrn缘由是这样的,我将明文加密后,得到<em>一个</em>密文,想把这个密文发送出去。rn由于在加密前,并不知道得到的密文是什么,所以我想用<em>一个</em>变量来表示密文,rn比如定义个密文数组的变量:char miwen[100];rn然后,我想把这个密文数组发送出去,怎么来发送呢?rn【我不大清楚怎么将这个miwen[100]中的内容发送出去】rnrn谢谢。请举例说明下。小弟谢谢。
socketsend函数
有谁知道<em>socket</em> 的<em>send</em>函数的实现部份是在那个.cpp文件吗?我在单步调试的时候执行到<em>send</em>函数,按F11键,就会弹出<em>一个</em>对话框,就是进不到内部,难道是微软保护的吗?
socket send的问题
系统的发送缓冲区大小为8K,当发送超过8k的数据时(接收端未接收),<em>send</em>不阻塞而是成功返回了.rn客户端connect后,直接<em>send</em>很大的数据(肯定大于系统发送缓冲区的大小)成功返回,返回值确实等于要发送的数据量,此时根本没让服务器<em>调用</em>recv接收。<em>send</em>的结果不是将待发送数据拷贝到系统发送缓冲区吗,可是缓冲区根本占不下,另一端也未接受,应该阻塞在<em>send</em>处啊,但却成功返回了rn
Socket中的send函数
<em>send</em>()函数: 函数原型:int <em>send</em>(SOCKET s,const char *buff,int len,int flag); 不论是客户端还是服务端都用<em>send</em>函数来向TCP发送连接的另一端发送数据。 客户端一般用<em>send</em>函数向服务器发送请求,服务器用<em>send</em>发送应答 参数:1. s 指定发送端套接字描述符。2. buff 表示存放发送数据的缓冲区。 3. 实际要发送的字节数, 4.第...
socket中的send问题
.NET中 在构造函数中初始化TCP连接,connect,在<em>进行</em>完一次<em>send</em>数据之后,第2次就不能<em>send</em>了,<em>需要</em>在connect一次,是不是.NET中的通信都这么浪费资源的,不象VC中的初始一次,可以多次使用了??
ssis中可以一个send mail 发送多个附件吗
ssis中可以<em>一个</em><em>send</em> mail 发送<em>多个</em>附件吗
socket send 问题
int temp=<em>send</em>(p_Doc->m_ServeSocket_forClient,toSend,8026,0);rnto <em>send</em> 是<em>一个</em>8026个字节的buffer rn每次运行这行代码之后在客户端recv的时候,总是接收两次 第一次4380个字节,第二次发剩下的字节rnrn请问怎么才能recv 一次把这个8026个字节接收完毕?rn问题可能出在哪里?rn着急中 rnrnrn谢谢
c#线程 lock用法
<em>线程</em> 是c# 的<em>一个</em>难点,这里将<em>线程</em>的相关用法上传上了大家分享。希望有用
POSIX线程多个线程可以共用一个属性吗?
我想创建好几个detached <em>线程</em>,可以只设置<em>一个</em>attr对象,然后让他们共享么?比如这样:rn[code=C/C++][/code]rnpthread_t thread1,thread2,thread3;rnpthread_attr_t thread_attr;rnrnpthread_attr_init(&thread_attr);rnpthread_attr_setdetachstate(&thread_attr,PTHREAD_CREATE_DETACHED);rnrnpthread_craete(&thread1, &thread_attr, thread_function, (void *)message);rnpthread_craete(&thread2, &thread_attr, thread_function, (void *)message);rnpthread_craete(&thread3, &thread_attr, thread_function, (void *)message);
多个线程同时向一个线程发消息,会有问题吗
rnrnrnrnrn
send函数会对数据进行分段吗
客户端和服务器端连<em>接好</em>以后,就可以用 <em>send</em> 和 recv 发送 char 数组了。rnrn如果我现在想传文件,听说有个FTP协议,不知道是不是应用层的,我现在刚看《windows网络编程》第二版第一章。rnrn比如我现在要传<em>一个</em>10G的游戏文件,我的思路是用 CFile 以二进制方式打开他,然后用<em>send</em>函数发送。我不知道 <em>send</em> 函数是不是会对文件按照传输层协议的要求对文件<em>进行</em>分段。 如果他不管,而我也没分批发送字节,那会怎么样。rn我看这书好像没有应用层协议,也许有,可能是我不认识。
多个线程同用一个线程函数行得通吗?
最近做<em>一个</em>桌面小程序,<em>需要</em>用到数个带 WS_EX_LAYERED 风格的窗口来实现。考虑到窗口较多,决定每个窗口的 WM_CREATE 消息中新建<em>一个</em>窗口<em>线程</em>,每个窗口的回调函数由主<em>线程</em>负责。在各窗口<em>线程</em>中实现诸如窗口的绘制、移动等操作。因为各个窗口实现的功能是重复的,使用同一段代码就可以实现,想问问在创建<em>线程</em>时把<em>线程</em>函数参数都指向同<em>一个</em>函数可不可以?不可以的话,怎么来实现我所说的这种方式?
Java线程学习笔记之Lock
java.util.concurrent.<em>lock</em>sjava.util.concurrent.<em>lock</em>s软件包为锁和等待条件提供<em>一个</em>框架的接口和类,它不同于内置同步和监视器。Lock是该软件包下的<em>一个</em>接口,其实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。 ReentrantLock Lock的实现,<em>一个</em>可重入的互斥锁 Lock,它具有与使用 synchroniz
Socket Send问题
1. 服务器rn 由<em>一个</em>且只有<em>一个</em><em>线程</em>,来发送。rn[code=C/C++]rn while (1)rn rn ...rn // 到发送消息队列里,取消息。rn // 此处,通过log文件分析,每次str的值都是正确的。rn int n = <em>send</em>(<em>socket</em>, str, MAX_ANSWER_LENGTH, 0);rn Sleep(1);rn rn[/code]rnrn2. 客户端rn 由<em>一个</em>且只有<em>一个</em><em>线程</em>,来接收。rn[code=C/C++]rn while(1)rn rn char recvBuf[MAX_ANSWER_LENGTH + 1] = 0;rn recv(m_<em>socket</em>, recvBuf, MAX_RECV_SQL_LENGTH, 0);rn ...rn // 此处,通过log文件分析,recvBuf可能有误。rn rn[/code]rnrn现象:rn 当服务器和客户端,同时运行与本地时,没有问题。rn 但是,当远程客户端访问本地服务器时,recvBuf可能有误。rn 比如,服务器注释处,依次发送的str为 "111111", "222222", "333333"rn 在客户端注释处,解析的可能为"111111", " 222", " 333", " 222", " 333"。rnrn请高手解释。
线程lock()作用迷惑?
for(int i=0;i<2;i++)rnrnThread t=new Thread(new ThreadStart(Start));rnt.IsBackground = true;rnt.Start();rnrnrnprivate void Start()rnrn <em>lock</em> (this.temp)rn rn rn rn ......rnrnrn如果<em>一个</em><em>线程</em>进入了Start()方法中的<em>lock</em>()代码中,那么另外<em>一个</em><em>线程</em>则不能进入<em>lock</em>锁定的代码,那么是不是这个另<em>一个</em><em>线程</em>会不会跳过<em>lock</em>锁定的代码,而继续执行<em>lock</em>以外的代码呢?rnrn
线程lock condition使用
下面是具体例子,一直抛错,搞不懂应该怎么用了;求修改求思想rnpackage com.sixth.exam;rnrnimport java.util.concurrent.<em>lock</em>s.*;rnrnpublic class T3rn public static void main(String[] args)rn rn rn ReentrantLock <em>lock</em>=new ReentrantLock();rn PrintThread pt=new PrintThread(<em>lock</em>);rn Thread t=new Thread(pt);rn t.start();rn rnrnclass PrintThread implements Runnablernrn rn ReentrantLock <em>lock</em>;rn Condition condition;rn PrintThread1 pt1;rn Thread t1;rn public PrintThread(ReentrantLock <em>lock</em>)rn rn this.<em>lock</em>=<em>lock</em>;rn condition=<em>lock</em>.newCondition();rn pt1=new PrintThread1(<em>lock</em>);rn t1=new Thread(pt1);rn rn public void run()rn rn t1.start();rn for(int i=3;i>=0;i--)rn rn System.out.println(i+"....");rn if(i==1)rn rn System.out.println("起床啦");rn condition.signalAll();rn rn rn rn rnrnclass PrintThread1 implements Runnablernrn ReentrantLock <em>lock</em>;rn Condition condition;rn public PrintThread1(ReentrantLock <em>lock</em>)rn rn this.<em>lock</em>=<em>lock</em>;rn condition=<em>lock</em>.newCondition();rn rn public void run()rn rn try rn <em>lock</em>.newCondition().await();rn catch (InterruptedException e) rn e.printStackTrace();rn rn System.out.println("复活了~");rn rn
关于线程使用lock
下面这段代码不对,输出是abbbbbbbbbbaaaaaaa,为什么不是aaaaaaaaabbbbbbbbbb,<em>线程</em>t1执行到sleep,<em>线程</em>t2获得执行,但执行到<em>lock</em>处为什么不阻塞,是t1释放了<em>lock</em>吗?rnusing System;rnusing System.Threading;rnnamespace MonitorSamplernrn /// rn /// Summary description for Class2.rn /// rn public class Class2rn rn public Class2()rn rn //rn // TODO: Add constructor logic herern //rn rn public static void Main(String[] args)rn rn Thread t1 = new Thread(new ThreadStart(new cls("a",true).printNum));//建立<em>线程</em>rn rn Thread t2 = new Thread(new ThreadStart(new cls("b",false).printNum));//建立<em>线程</em>rn t1.Start();rn Thread.Sleep(100); rn t2.Start();rn Console.Read();rn rn rn class clsrn rn private string m_s;rn private bool m_b;rn public cls(string s,bool b)rn rn m_b=b;rn m_s=s;rn rn public void printNum()rn rn int i;rn string s;rn <em>lock</em>(this)rn rn for (i=0;i<10;i++)rn rn s=m_s+i;rn Console.WriteLine(m_s); rn if (m_b)rn Thread.Sleep(1000);rn rn rn rn rn rnrn
java线程五之Lock
1.有了synchronized,为什么还用Lock?Lock的应用场景 解决获取锁的等待问题 如果使用synchronized,<em>线程</em>A要想释放锁,要么<em>线程</em>A执行完毕,要么<em>线程</em>A执行发生异常才能释放锁。 当<em>线程</em>A执行遇到阻塞等情况,<em>线程</em>B要想获取这个锁,必须一直等到<em>线程</em>A释放锁后才能获取锁并执行<em>线程</em>B的程序。 而使用用Lock的tryLock(Long time)方法,可以使<em>线程</em>只等待一定的...
线程的LOCK使用问题
例如我有<em>一个</em>全局变量(用静态类来做)Class.num,还有<em>一个</em>Class.obj,用来<em>lock</em>用rnrn分别有Thread_A和Thread_B两个<em>线程</em>同时工作rnrn现在这两个<em>线程</em>都有可能同时去访问修改这个Class.numrnrn我想用<em>lock</em>去保护,达到让这两个<em>线程</em>顺序的去访问修改这个Class.numrnrn那么看书上写的应该是:rnrn<em>lock</em>(Class.obj)rnrn Class.num=123;//这样去保护就没事了rnrnrnrn问题来了rnrn假如我有三个要保护的变量呢,如再加<em>一个</em>Class.codernrn如果我继续用<em>lock</em>来保护rn<em>lock</em>(Class.obj)rnrn Class.code=333;rnrnrn那么,在Thread_A执行到rn<em>lock</em>(Class.obj)rnrn Class.code=333;rnrn的时候,另<em>一个</em><em>线程</em>Thread_B在执行rn<em>lock</em>(Class.obj)rnrn Class.num=123;rnrn这句时,会等待Thread_A的<em>lock</em>执行完再执行吗?rnrnrn具体就是想弄明白,<em>lock</em>是对Class.obj来<em>进行</em>保护还是对<em>lock</em>的语句块里的变量<em>进行</em>保护
线程lock(急急急)
public static void ReadCallback(IAsyncResult objIAsyncResult)rnrnStateObject objStateObject = (StateObject)objIAsyncResult.AsyncState;rnSocket objSocketHandler = objStateObject.objSocketWork;rnint intBytesRead = objSocketHandler.EndReceive(objIAsyncResult);rnif(intBytesRead > 0) rnrnbyte[] btReceive = new byte[intBytesRead];rnfor(int i=0;i
WIN32汇编写的记事本源码下载
WIN32汇编写的记事本源码WIN32汇编写的记事本源码WIN32汇编写的记事本源码 相关下载链接:[url=//download.csdn.net/download/xiancaonima/2512945?utm_source=bbsseo]//download.csdn.net/download/xiancaonima/2512945?utm_source=bbsseo[/url]
android反编译下载
android反编译 相关下载链接:[url=//download.csdn.net/download/u010452598/6004619?utm_source=bbsseo]//download.csdn.net/download/u010452598/6004619?utm_source=bbsseo[/url]
pdf转word快捷软件下载
pdf转word文件,一步到位,快捷方便。 相关下载链接:[url=//download.csdn.net/download/sinat_20818663/7918029?utm_source=bbsseo]//download.csdn.net/download/sinat_20818663/7918029?utm_source=bbsseo[/url]
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件
我们是很有底线的