用C编写Windows和Ubuntu进行TCP通讯程序遇到的问题
以下为linux作为客户端的程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include<stdlib.h>
int main(){
//创建套接字
int sock = socket(AF_INET, SOCK_STREAM, 0);
//向服务器(特定的IP和端口)发起请求
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr)); //每个字节都用0填充
serv_addr.sin_family = AF_INET; //使用IPv4地址
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //具体的IP地址
serv_addr.sin_port = htons(6000); //端口
int err=connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
if(err==-1)
{
printf("error\n");
}
else
{
printf("nice\n");
}
//读取服务器传回的数据
char readbuffer[100];
read(sock, readbuffer, sizeof(readbuffer)-1);
printf("Message form server: %s\n", readbuffer);
//给服务器发
char send[]="你也是";
write(sock,send,sizeof(send));
//关闭套接字
close(sock);
return 0;
}
Windows作为服务器
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib") //需要加载 ws2_32.dll Windows系统网络编程库
int main(){
//初始化 DLL库
WSADATA wsaData;
WSAStartup( MAKEWORD(2, 2), &wsaData);
//创建套接字
SOCKET servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//绑定套接字
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
sockAddr.sin_family = PF_INET; //使用IPv4地址
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //具体的IP地址
sockAddr.sin_port = htons(6000); //端口
bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
//进入监听状态
listen(servSock, 20);
//接收客户端请求
SOCKADDR clntAddr;
int nSize = sizeof(SOCKADDR);
SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);
//向客户端发送数据
char *str = "Hello World!";
send(clntSock, str, strlen(str)+sizeof(char), NULL);
char re[100];
recv(clntSock,re,sizeof(re),NULL);
//关闭套接字
closesocket(clntSock);
closesocket(servSock);
//终止 DLL 的使用
WSACleanup();
return 0;
}
先启动Windows服务器,然后启动Ubuntu客户端运行结果如下:


请问怎么解决连接失败这个问题呢?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include<stdlib.h>
int main(){
//创建套接字
int sock = socket(AF_INET, SOCK_STREAM, 0);
//向服务器(特定的IP和端口)发起请求
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr)); //每个字节都用0填充
serv_addr.sin_family = AF_INET; //使用IPv4地址
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //具体的IP地址
serv_addr.sin_port = htons(6000); //端口
int err=connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
if(err==-1)
{
printf("error\n");
}
else
{
printf("nice\n");
}
//读取服务器传回的数据
char readbuffer[100];
read(sock, readbuffer, sizeof(readbuffer)-1);
printf("Message form server: %s\n", readbuffer);
//给服务器发
char send[]="你也是";
write(sock,send,sizeof(send));
//关闭套接字
close(sock);
return 0;
}
Windows作为服务器
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib") //需要加载 ws2_32.dll Windows系统网络编程库
int main(){
//初始化 DLL库
WSADATA wsaData;
WSAStartup( MAKEWORD(2, 2), &wsaData);
//创建套接字
SOCKET servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//绑定套接字
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
sockAddr.sin_family = PF_INET; //使用IPv4地址
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //具体的IP地址
sockAddr.sin_port = htons(6000); //端口
bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
//进入监听状态
listen(servSock, 20);
//接收客户端请求
SOCKADDR clntAddr;
int nSize = sizeof(SOCKADDR);
SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);
//向客户端发送数据
char *str = "Hello World!";
send(clntSock, str, strlen(str)+sizeof(char), NULL);
char re[100];
recv(clntSock,re,sizeof(re),NULL);
//关闭套接字
closesocket(clntSock);
closesocket(servSock);
//终止 DLL 的使用
WSACleanup();
return 0;
}
先启动Windows服务器,然后启动Ubuntu客户端运行结果如下:


请问怎么解决连接失败这个问题呢?
...全文
相关推荐
ubuntu下串口通信(Modbus RTU 协议 + 串口程序 + cutecom调试助手)总结他人的!
- **示例**:例如,向空调发送十六进制指令时,可以通过C语言编写程序,使用`open()`函数打开串口设备文件(如`/dev/ttyS0`),然后使用`write()`函数发送指令。
网络操作系统习题及答案.doc
**网络硬件体系**:计算机网络由通讯子网和资源子网构成,通讯子网负责数据传输,资源子网则包含提供服务的硬件和软件。7.
网络操作系统习题及答案.pdf
常见的网络操作系统有Unix、Linux(例如Red Hat Enterprise Linux或Ubuntu Server)、Windows Server系列(如Windows 2000 Server和
基于Qt5.4的仿QQ聊天室项目实战|跨平台即时通讯系统开发
简介:本项目以Qt5.4框架为基础,打造一个功能完整的仿QQ聊天室应用,涵盖登录、注册、私聊、群聊等核心即时通讯功能,支持在Ubuntu 12和Windows平台运行,实现跨平台桌面客户端与Linux服务器协同工作。项目深入实践网络编程、用户认证、多线程处理、消息分发机制及图形界面设计,采用QTcpServer/QTcpSocket进行TCP通信,结合SQLite或MySQL存储用户数据并实现密码加密,利用Qt事件驱动模型和数据序列化技术完成高效稳定的消息传输。
仿QQ聊天室,绝对干货
描述中提到的开发平台包括Ubuntu 12和Windows,这表示该应用支持跨平台开发,可以在Linux和Windows操作系统上运行。


