c++socket,c++socket编程

http://www.itjxue.com  2023-01-12 21:12  来源:未知  点击次数: 

C语言SOCKET问题

exit(0);是对的。

在void main() 上新加一行

#pragma comment(lib, "ws2_32.lib")

应该就可以了

C语言Socket服务器怎么给客户端发消息

你的文件中的问题

// 会阻塞进程,直到有客户端连接上来为止

// 既然是直到有客户端连接上,那么就要弄明白哪个是与客户端连接的套接字

// sockClient就是与客户端连接的套接字

sockClient = accept(sockServer, (SOCKADDR*)addrClient, len);

//接收并打印客户端数据

recv(sockClient, recvBuf, 100, 0);

printf("%s\n", recvBuf);

// 所以此处,应该把sockServer改为sockClient

send(/*sockServer*/sockClient, sendBuf, 100, 0);

PS:服务器客户端通信,是要保持服务器与客户端的连接。

而不能这样立即关闭,如果设置不对,立即关闭,缓冲区的数据是会丢失的。那客户端也就不会再收到数据了。

你可以加Sleep(10000);来测是通信过程

//关闭socket

closesocket(sockClient);

C语言socket编程要怎么实现服务器可以发消息给客户端?

先要理解socket是什么?

简单的说socket是一个全双工的通信通道,

即使用TCP或者UDP通信时均可以在发送消息的同时接受消息,

它不区分是否是服务器。

根据这个概念你的问题就很好回答。

》当客户端与服务器连接后。有什么方法使服务器可以随时随地发消息给客户端?

》我现在只能。客户端发个消息给服务器。服务器才能发个消息给客户端。也就是说客户端不发消息。服务器就没法发消息给客户端。

》求大牛给个思路。当连接后。客户端与服务器双方可以随时随地通信!

使用多线程,一个维持接受逻辑,一个维持送信逻辑,即可完成同时接受及发送。

客户端及服务器端均做上述设置。

而你的做法是在一个线程中执行接受与送信,因此只能按照顺序逻辑完成接收与送信。

关键点是多线程。

C中socket的基本使用

函数原型:

int socket(int domain, int type, int protocol);

参数说明:

函数原型:

参数说明:

函数原型:

参数说明:

参数说明:

函数原型:

参数说明:

函数原型:

参数说明:

怎样用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() \x0d\x0a 7.sendto() 和recvfrom() \x0d\x0a 8.close() 和shutdown() \x0d\x0a 9.getpeername() \x0d\x0a 10.gethostname() \x0d\x0a这些接口是在Winsock2.h中定义的不是在mfc中定义的,你只需要包含Winsock2.h头文件和Ws2_32.lib库就可以了。

C语言编程socket有个客服端和服务端怎么建文件并且运行

网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

下面用Socket实现一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。

【服务器端】

#include "stdafx.h"

#include stdio.h

#include winsock2.h

#include winsock2.h

#define SERVER_PORT 5208 //侦听端口

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int ret, nLeft, length;

SOCKET sListen, sServer; //侦听套接字,连接套接字

struct sockaddr_in saServer, saClient; //地址信息

char *ptr;//用于遍历信息的指针

//WinSock初始化

wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本

ret=WSAStartup(wVersionRequested, wsaData);

if(ret!=0)

{

printf("WSAStartup() failed!\n");

return;

}

//创建Socket,使用TCP协议

sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sListen == INVALID_SOCKET)

{

WSACleanup();

printf("socket() faild!\n");

return;

}

//构建本地地址信息

saServer.sin_family = AF_INET; //地址家族

saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序

saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址

//绑定

ret = bind(sListen, (struct sockaddr *)saServer, sizeof(saServer));

if (ret == SOCKET_ERROR)

{

printf("bind() faild! code:%d\n", WSAGetLastError());

closesocket(sListen); //关闭套接字

WSACleanup();

return;

}

//侦听连接请求

ret = listen(sListen, 5);

if (ret == SOCKET_ERROR)

{

printf("listen() faild! code:%d\n", WSAGetLastError());

closesocket(sListen); //关闭套接字

return;

}

printf("Waiting for client connecting!\n");

printf("Tips: Ctrl+c to quit!\n");

//阻塞等待接受客户端连接

while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。

{

length = sizeof(saClient);

sServer = accept(sListen, (struct sockaddr *)saClient, length);

if (sServer == INVALID_SOCKET)

{

printf("accept() faild! code:%d\n", WSAGetLastError());

closesocket(sListen); //关闭套接字

WSACleanup();

return;

}

char receiveMessage[5000];

nLeft = sizeof(receiveMessage);

ptr = (char *)receiveMessage;

while(nLeft0)

{

//接收数据

ret = recv(sServer, ptr, 5000, 0);

if (ret == SOCKET_ERROR)

{

printf("recv() failed!\n");

return;

}

if (ret == 0) //客户端已经关闭连接

{

printf("Client has closed the connection\n");

break;

}

nLeft -= ret;

ptr += ret;

}

printf("receive message:%s\n", receiveMessage);//打印我们接收到的消息。

}

// closesocket(sListen);

// closesocket(sServer);

// WSACleanup();

}

【客户端】

#include "stdafx.h"

#include stdio.h

#include stdlib.h

#include winsock2.h

#define SERVER_PORT 5208 //侦听端口

void main()

(责任编辑:IT教学网)

更多

推荐导航代码文章