C里怎么样用send()和recv() 网络编程高手来看

请问如果我的client 和server已经建立好了连接,我想从client边说hello然后server接受到显示出来 然后再传到client, 等于client里显示2边hello, server 里显示一边。

请问怎么样用send()和recv(),client能接收到自己发给server的hello.
请写一下简单的工作过程。

贴上我的代码,你看看吧,或许对你有帮助。
客户端:
char sendbuf[200] = "";
char recvbuf[200] = "";
while (strcmp(recvbuf,"exit")!=0)
{

//while( bytesRecv == SOCKET_ERROR )
//{
state = recv( m_socket, recvbuf,200, 0 );
if (-1==state)
{
break;
}
// if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET )
// {
// printf( "Connection Closed.\n");
// break;
// }
// if (bytesRecv < 0)
// return false;

// printf( "Message Recv: %ld\n", recvbuf );
//}

cout<<recvbuf<<endl;
cout<<"选择功能:";
cin>>sendbuf;
while (strcmp(sendbuf,"1")&&strcmp(sendbuf,"2")&&strcmp(sendbuf,"3"))
{
cout<<"输入错误,请重新你输入:"<<endl;
cout<<"选择功能:";
cin>>sendbuf;
}
服务器端:
SOCKET AcceptSocket;
printf( "Waiting for a client to connect...\n" );
AcceptSocket = SOCKET_ERROR;
while ( AcceptSocket == SOCKET_ERROR )
{
AcceptSocket = accept( sockSvr, NULL, NULL );
}
printf( "Client Connected.\n");
sockSvr = AcceptSocket;

char sendBuf[70]="";
char revBuf[70]="";
int i;

while (1)
{
char sendBuf[200]="";
char revBuf[200]="";
int i;

send(sockSvr,"已经连接上服务器,请选择功能:\n1. 截取对方屏幕 \n2. 查找指定文件 \n3.dos命令",200,0);

客户端和服务端,都可以send(),revc,但是send和revc要对应,如果一端revc,但是另一端没有send,就会出现阻塞。
连接上后,服务端和客户端可以等同看待。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-20
client向server发送没问题<因为server本来就设置有监视的作用>

server转向client

2种方法,当client发送字符的同时也启动一个监视线程,等待服务器的发送

服务器发送完毕后,线程就结束<偶尔转发可以用这个>

还有一个方法就是直接在client端开启一个监视线程,两边随时对发

<经常转发的可以用这个>
第2个回答  2008-09-21
while(1)
{
scanf(msg)
send(msg)
recv(msg)
printf(msg)
}

阻塞模式。
当消息是严格的一去一回 这样应该是可以的。
要是Server不给回 recv 就卡住了。。
所以还是建议用开线程 , 或者非阻塞轮询
第3个回答  2008-09-22
int send(int s, const void *msg, size_t len, int flags);
int recv(int s, void *buf, size_t len, int flags);

s是你的socket号,msg,buf是你要传输的内容,然后是长度,最后是标志!
第4个回答  2008-09-25
《Visual C++网络通信编程实用案例精选》这是书名,其它不想说。

C里怎么样用send()和recv() 网络编程高手来看
int i;send(sockSvr,"已经连接上服务器,请选择功能:\\n1. 截取对方屏幕 \\n2. 查找指定文件 \\n3.dos命令",200,0);客户端和服务端,都可以send(),revc,但是send和revc要对应,如果一端revc,但是另一端没有send,就会出现阻塞。连接上后,服务端和客户端可以等同看待。

TCP之深入浅出send&recv
当发送数据时,数据会从应用层、传输层、网络层、数据链路层依次传递。上图为send函数源码调用逻辑图,若对源码感兴趣,可查阅net\/tcp.c获取详细实现。recv函数实现类似,从数据链路层接收数据帧,通过网卡驱动处理后,进入内核进行协议层处理,最终将数据放入socket的接收缓冲区。在实际应用中,非阻塞send...

sendto和recvfrom与send和recv在使用上的主要区别是什么?
通常情况下,send()和recv()是TCP套接字通信的主力,它们在数据传输时基于连接,确保了消息的有序到达。然而,sendto()和recvfrom()则更适用于UDP套接字,这种无连接的协议,它们允许你向任意地址发送数据,接收方也不需要预先建立连接。然而,这并不意味着它们的使用场景完全固定。在某些特殊情况下,...

UDP协议 sendto 和 recvfrom 浅析与示例
在实际操作中,如遇到错误,sendto和recvfrom会返回-1,这时可以通过errno获取错误信息。完整的示例代码展示了服务端和客户端的基本操作,包括套接字创建、数据发送与接收,以及最后的关闭连接。如果你正寻求进一步提升网络编程能力,推荐观看视频课程如TCP\/UDP应用场景、UDP可靠性设计,以及参与C\/C++服务器开...

C语言与网络问题 高手进
DWORD WINAPI RecvThread(LPVOID para)\/\/接收数据线程函数{int iErrorCode;struct hostent *hp;char RecvBuf[65535]={0};sockListen = socket(AF_INET , SOCK_RAW , IPPROTO_IP);CheckSockError(sockListen, "socket");\/\/设置IP头操作选项BOOL bOpt = true;iErrorCode = setsockopt(sockRaw,IPPROTO_IP,...

怎样用C语言做socket网络编程?
mfc只是对socket进行了一些封装,大部分人做网络编程都是用的原始的socket,比如如下接口都可以在c下进行调用\\x0d\\x0a 1.socket() \\x0d\\x0a 2.bind() \\x0d\\x0a 3.connect() \\x0d\\x0a 4.listen() \\x0d\\x0a 5.accept() \\x0d\\x0a 6.send() 和recv() ...

网络编程非阻塞模式下 send 和 recv 函数的返回值
总结网络编程中非阻塞模式下send和recv函数的返回值意义,主要涉及三种情况。具体而言,send函数的返回值表明发送操作的状态。若返回值为成功发送的字节数,则表示发送成功;若返回值为0,则表示发送了0字节数据,通常用于关闭连接;若返回值为负值,则表示发送失败,具体错误码可从errno中获取。recv函数的...

c程序如何在windows下进行网络编程?
和编译(OR IDE)环境有关,比如vc就可以直接使用所有c的库函数.ftp使用TCP,那么就用流式套接字(SOCK_STREAM)的相关函数,如果作为客户端,调用顺序如下:1 socket()2 connect()3 send\/recv 4 closesocket()如果是服务器端,调用顺序如下:1 socket()2 bind()3 listen()4 accept()5 send\/recv...

sendLinux C 函数
在Linux中,socket编程中涉及到消息传输的几个关键函数包括sendto, sendmsg, recv, recvfrom,和recvmsg,它们都在<sys\/socket.h>头文件中定义。其中,函数ssize_t send(int s, const void *msg, size_t len, int flags);的作用是向对方主机发送数据。第一个参数 s 是发送端的套接字描述符,它...

UDP协议 sendto 和 recvfrom 浅析与示例
(1)使用socket()函数创建套接字文件描述符;(2)通过struct sockaddr_in结构体设置服务器地址和监听端口;(3)向服务器发送数据,使用sendto()函数;(4)接收服务器的数据,使用recvfrom()函数;(5)关闭套接字,使用close()函数。关于sockaddr和sockaddr_in的区别:一、sockaddr sockaddr在头文件...

相似回答