socket通信 客户端与服务器无法连通 不知道为什么。。。

huankid 2011-11-15 09:37:56
#include <winsock.h>
#include <stdio.h>

#define MY_PORT 6000

int main() {
SOCKET conn_sock;
struct sockaddr_in remote_addr;
int bytes_recvd;
char buffer[100];
WSADATA wsaData;

WSAStartup(MAKEWORD(1,1),&wsaData);

conn_sock = socket(AF_INET, SOCK_STREAM, 0); //socket构造函数
bind(conn_sock, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr));//绑定

remote_addr.sin_family = AF_INET;
remote_addr.sin_port = htons(MY_PORT);
remote_addr.sin_addr.s_addr = inet_addr("localhost");

connect(conn_sock, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr));//建立连接
bytes_recvd = recv(conn_sock, buffer, sizeof(buffer), 0); //接收数据
printf("Received (%d bytes): \"%s\"\n", bytes_recvd, buffer);

closesocket(conn_sock);
WSACleanup();

return 0;
}

#include <winsock.h>
#include <stdio.h>

#define MY_PORT 6000

int main() {
SOCKET listen_sock, new_sock;
struct sockaddr_in my_addr;
int dummy;
char buffer[50] ="How old are you?\n";
WSADATA wsaData;

WSAStartup(MAKEWORD(1,1),&wsaData);

listen_sock = socket(AF_INET, SOCK_STREAM, 0); //socket 构造函数

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MY_PORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

bind(listen_sock, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));//绑定
listen(listen_sock, 5);//监听
new_sock = accept(listen_sock, NULL, &dummy);//接收链接
send(new_sock, buffer, strlen(buffer), 0);//发送数据

closesocket(new_sock);
closesocket(listen_sock);
WSACleanup();

return 0;
}

怎样才能互发消息?
...全文
213 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2011-11-16
  • 打赏
  • 举报
回复
LS正解:客户端不需要绑定
bind(conn_sock, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr));//绑定
ganlubing 2011-11-16
  • 打赏
  • 举报
回复
而且,tcpclient不需要bind操作吧,client的端口应该可变的。只有服务器端使用固定端口。
ganlubing 2011-11-16
  • 打赏
  • 举报
回复
accept(int s, struct sockaddr *addr, int *addrlen)
自信男孩 2011-11-16
  • 打赏
  • 举报
回复
不妨在定义了客户端的结构体即:struct sockaddr_in client;
然后修改accept函数:new_sock = accept(listen_sock, (struct sockaddr *)&client, &sizeof(struct sockaddr_in));

最好为每个函数都做一下错误处理,这样即使出错了也知道是哪个出错了,错在了哪。
黑娃 2011-11-15
  • 打赏
  • 举报
回复
accept(listen_sock, NULL, &dummy);//接收链接
最后两个参数是套接字地址和地址长度
黑娃 2011-11-15
  • 打赏
  • 举报
回复
accept参数没对

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧