[]socket无法连接服务器
客户端代码:
let PORT: number = 8080;
let IP: string = "127.0.0.1";
export class NetSocket extends Laya.Socket{
private static _instance: NetSocket;
public static get instance(): NetSocket {
if (!NetSocket._instance) {
NetSocket._instance = new NetSocket();
NetSocket._instance.endian = laya.net.Socket.LITTLE_ENDIAN;
NetSocket._instance.initSocket();
}
return NetSocket._instance;
}
private state_: EConnectionState = EConnectionState.eDistconnected;
private initSocket(): void {
this.on(Laya.Event.OPEN, this, this.onConected);
this.on(Laya.Event.ERROR, this, this.onError);
}
public conectToServer(): void { //“连接”按钮的回调
if (this.connected) return;
super.connect(IP, PORT);
}
////////////////////////////////////
protected _onOpen(...args: any[]): void {
super._onOpen(args);
this.state_ = EConnectionState.eConnected;
console.log("conect to 127.0.0.1");
}
protected _onMessage(msg: any): void {
super._onMessage(msg);
console.log("receve msg : ");
console.log(msg);
}
protected _onClose(...args: any[]): void {
super._onClose(args);
console.log("link closeed : ");
console.log(args);
this.reset();
}
protected _onError(...args: any[]): void {
super._onError(args);
console.log("link error : ");
console.log(args);
this.reset();
}
private reset() {
this.state_ = EConnectionState.eDistconnected;
}
private onConected(): void {
console.log("conected to server");
}
private onError(): void {
console.log("error.....................");
}
}
服务器代码:(c语言)
int main(int argc, char* argv[])
{
//初始化WSA
WORD sockVersion = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != 0)
{
return 0;
}
//创建套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (slisten == INVALID_SOCKET)
{
printf("socket error !");
return 0;
}
//绑定IP和端口
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8080);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error !");
}
//开始监听
if (listen(slisten, 5) == SOCKET_ERROR)
{
printf("listen error !");
return 0;
}
//循环接收数据
SOCKET sClient;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char buffData[1000] = {0};
int buffLen = sizeof(buffData);
char *finalStr = "";
printf("等待连接...\n");
sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
if (sClient == INVALID_SOCKET)
{
printf("accept error !");
return 0;
}
printf("接收到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
recv(sClient, buffData, buffLen, 0);
printf("收到的字符串是:%s\n", buffData);
while (true)
{
memset(buffData, '\0', sizeof(buffData));
recv(sClient, buffData, buffLen, 0);
printf("收到的字符串是:%s\n", finalStr);
char * sendData = "hello client.";
send(sClient, sendData, strlen(sendData), 0);
}
closesocket(slisten);
WSACleanup();
return 0;
}
服务器打印出一串文本后就没反应了,客户端也没有触发onConected或者_onOpen函数,下面是服务器打印的文本
等待连接...
接收到一个连接:127.0.0.1
收到的字符串是:GET / HTTP/1.1
Host: 127.0.0.1:8080
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost:3138
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Sec-WebSocket-Key: kzjtRVMCwDoKQgwiFeIz5A==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
let PORT: number = 8080;
let IP: string = "127.0.0.1";
export class NetSocket extends Laya.Socket{
private static _instance: NetSocket;
public static get instance(): NetSocket {
if (!NetSocket._instance) {
NetSocket._instance = new NetSocket();
NetSocket._instance.endian = laya.net.Socket.LITTLE_ENDIAN;
NetSocket._instance.initSocket();
}
return NetSocket._instance;
}
private state_: EConnectionState = EConnectionState.eDistconnected;
private initSocket(): void {
this.on(Laya.Event.OPEN, this, this.onConected);
this.on(Laya.Event.ERROR, this, this.onError);
}
public conectToServer(): void { //“连接”按钮的回调
if (this.connected) return;
super.connect(IP, PORT);
}
////////////////////////////////////
protected _onOpen(...args: any[]): void {
super._onOpen(args);
this.state_ = EConnectionState.eConnected;
console.log("conect to 127.0.0.1");
}
protected _onMessage(msg: any): void {
super._onMessage(msg);
console.log("receve msg : ");
console.log(msg);
}
protected _onClose(...args: any[]): void {
super._onClose(args);
console.log("link closeed : ");
console.log(args);
this.reset();
}
protected _onError(...args: any[]): void {
super._onError(args);
console.log("link error : ");
console.log(args);
this.reset();
}
private reset() {
this.state_ = EConnectionState.eDistconnected;
}
private onConected(): void {
console.log("conected to server");
}
private onError(): void {
console.log("error.....................");
}
}
服务器代码:(c语言)
int main(int argc, char* argv[])
{
//初始化WSA
WORD sockVersion = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != 0)
{
return 0;
}
//创建套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (slisten == INVALID_SOCKET)
{
printf("socket error !");
return 0;
}
//绑定IP和端口
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8080);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error !");
}
//开始监听
if (listen(slisten, 5) == SOCKET_ERROR)
{
printf("listen error !");
return 0;
}
//循环接收数据
SOCKET sClient;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char buffData[1000] = {0};
int buffLen = sizeof(buffData);
char *finalStr = "";
printf("等待连接...\n");
sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
if (sClient == INVALID_SOCKET)
{
printf("accept error !");
return 0;
}
printf("接收到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
recv(sClient, buffData, buffLen, 0);
printf("收到的字符串是:%s\n", buffData);
while (true)
{
memset(buffData, '\0', sizeof(buffData));
recv(sClient, buffData, buffLen, 0);
printf("收到的字符串是:%s\n", finalStr);
char * sendData = "hello client.";
send(sClient, sendData, strlen(sendData), 0);
}
closesocket(slisten);
WSACleanup();
return 0;
}
服务器打印出一串文本后就没反应了,客户端也没有触发onConected或者_onOpen函数,下面是服务器打印的文本
等待连接...
接收到一个连接:127.0.0.1
收到的字符串是:GET / HTTP/1.1
Host: 127.0.0.1:8080
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost:3138
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Sec-WebSocket-Key: kzjtRVMCwDoKQgwiFeIz5A==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
没有找到相关结果
已邀请:
要回复问题请先登录
1 个回复
Laya_XS
赞同来自: