//以下代码,实现一个TCP socket练习,由客户端给服务器端发消息,服务器端接收信息。
//不好意思,功能有点变态:服务器启动后会监视是否有客户端来建立连接,如果有,则接收等待。客户端每启动一次就有且只有一次向服务器发消息的机会,输入消息,回车发送后就进程退出。
//功能虽然简单,但是也实现了基本的通信功能,如果结合我之前发的和线程相关的博客内容,再加上一点想象能力,我想要写一个功能强大的网络聊天程序是很有可能 滴。
//服务器端程序编写
#include <iostream>
using namespace std;#include <cstdlib>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main()
{
int sd = socket(AF_INET, SOCK_STREAM, 0);
if(sd == -1)cout << "socket create error" << endl,exit(-1);
struct sockaddr_in addr = {};
addr.sin_family = AF_INET;
addr.sin_port = htons(22222);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
int res = bind(sd, (struct sockaddr*)&addr, sizeof(addr));
if(res == -1)cout << "bind error" << endl,exit(-2);
cout << "bind success" << endl;
if(-1 == listen(sd,10))cout << "listen error" << endl,exit(-3);
struct sockaddr_in c_addr = {};
socklen_t len = sizeof c_addr;
while(1)
{
cout << "start accept" << endl;
int csd = accept(sd, (struct sockaddr*)&c_addr, &len);
cout << "accept success" << endl;
char buf[111] = {};
cout << "recvd a message: ";
recv(csd, buf, sizeof(buf), 0);
cout << buf << endl;
}
close(sd);
return 0;}
//客户端程序编写
#include <iostream>
using namespace std;
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <cstdlib>
int main()
{
int sd = socket(AF_INET, SOCK_STREAM, 0);
if(sd == -1)cout << "client socket create error" << endl,exit(-1);
struct sockaddr_in addr = {};
addr.sin_family = AF_INET;
addr.sin_port = htons(22222);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
int res = connect(sd, (struct sockaddr*)&addr, sizeof(addr));
if(res == -1)cout << "connect failed" << endl,exit(-2);
cout << "start send messages" << endl;
char buf[222] = {};
cin.getline(buf,222);
send(sd, buf, sizeof(buf), 0);
close(sd);
return 0;
}